GroupBy Linq2db.MySQL中的DateTime日期部分C#

时间:2017-10-22 08:33:58

标签: c# mysql datetime linq2db

我正在尝试按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))'无法转换   到SQL

这在Linq2db中是否可行?

编辑:

另一个问题的建议解决方案是在数据库中创建一个我现在已经完成的函数(fTruncateTime),返回Date(DateTime),但我不知道如何在我的GroupBy子句中使用它。 / p>

1 个答案:

答案 0 :(得分:0)

我最终放弃了一个查询并将其拆分为两个查询。这给了我想要的东西。

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;