【问题标题】:GroupBy date portion of DateTime in Linq2db.MySQL C#Linq2db.MySQL C# 中 DateTime 的 GroupBy 日期部分
【发布时间】:2017-10-22 08:33:58
【问题描述】:

我正在尝试按 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 子句中使用它。

【问题讨论】:

标签: c# mysql datetime linq2db


【解决方案1】:

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

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多