Linq2db.MySQL C# 中 DateTime 的 GroupBy 日期部分
GroupBy date portion of DateTime in Linq2db.MySQL C#
我正在尝试按 Linq2db.MySQL 中 DateTime 的日期部分进行分组。
我的第一次尝试是:
using (var db = MySqlTools.CreateDataConnection(connectionString))
{
{
var query = from t in db.GetTable<Change_log>()
.Where(t => t.Action == 15)
.GroupBy(t => new { t.Change_date.Date, t.Reference_no }).Where(grp => grp.Count() > 1)
.SelectMany(t => t).ToList()
.OrderBy(t => t.Change_date)
select t;
但是 DateTime.Date 无法识别。
我尝试安装 MySQL.Data.Entity 和 Entity Framework 并将 GroupBy 更改为
.GroupBy(t => new { dd = DbFunctions.TruncateTime(t.Change_date), t.Reference_no }).Where(grp => grp.Count() > 1)
但是我得到了错误:
‘TruncateTime (convert(selectParm.Change_date))’ Cannot be converted
to SQL
这在 Linq2db 中甚至可能吗?
编辑:
在另一个问题中提出的解决方案是在数据库中创建一个我现在已经完成的函数 (fTruncateTime),返回日期 (DateTime),但我不知道如何在我的 GroupBy 子句中使用它。
我最终放弃了一个查询并将其拆分为两个查询。这给了我想要的东西。
var query = from t in db.GetTable<Change_log>()
.Where(t => t.Action == 15)
.ToList()
.OrderBy(t => t.Change_date)
select new
{
dd = t.Change_date.ToShortDateString(),
rr = t.Reference_no,
};
var query2 = from q in query
.GroupBy(q => new { q.dd, q.rr })
.Where(grp => grp.Count() > 1)
.Select(q => q.First()) // = select distinct
.OrderBy(q => q.rr)
.ToList()
select q;
我正在尝试按 Linq2db.MySQL 中 DateTime 的日期部分进行分组。
我的第一次尝试是:
using (var db = MySqlTools.CreateDataConnection(connectionString))
{
{
var query = from t in db.GetTable<Change_log>()
.Where(t => t.Action == 15)
.GroupBy(t => new { t.Change_date.Date, t.Reference_no }).Where(grp => grp.Count() > 1)
.SelectMany(t => t).ToList()
.OrderBy(t => t.Change_date)
select t;
但是 DateTime.Date 无法识别。 我尝试安装 MySQL.Data.Entity 和 Entity Framework 并将 GroupBy 更改为
.GroupBy(t => new { dd = DbFunctions.TruncateTime(t.Change_date), t.Reference_no }).Where(grp => grp.Count() > 1)
但是我得到了错误:
‘TruncateTime (convert(selectParm.Change_date))’ Cannot be converted to SQL
这在 Linq2db 中甚至可能吗?
编辑:
在另一个问题中提出的解决方案是在数据库中创建一个我现在已经完成的函数 (fTruncateTime),返回日期 (DateTime),但我不知道如何在我的 GroupBy 子句中使用它。
我最终放弃了一个查询并将其拆分为两个查询。这给了我想要的东西。
var query = from t in db.GetTable<Change_log>()
.Where(t => t.Action == 15)
.ToList()
.OrderBy(t => t.Change_date)
select new
{
dd = t.Change_date.ToShortDateString(),
rr = t.Reference_no,
};
var query2 = from q in query
.GroupBy(q => new { q.dd, q.rr })
.Where(grp => grp.Count() > 1)
.Select(q => q.First()) // = select distinct
.OrderBy(q => q.rr)
.ToList()
select q;