【问题标题】:LINQ. Grouping by days. How to do this easily?LINQ。按天分组。如何轻松做到这一点?
【发布时间】:2010-06-16 21:39:09
【问题描述】:

我似乎找不到任何好的参考。我在 SQL 中有很多带有日期的数据。所以我想制作一个折线图来显示这些数据随时间的变化。如果我想在几天内显示它,那么我需要按天分组.. 但是 LOGDATE 是完整日期.. 不是 DAY..

所以我在下面有这个,但 LINQ 不知道 'DayOfYear' 属性是什么......

 var q = from x in dc.ApplicationLogs
                let dt = x.LogDate
                group x by new { dayofyear = dt.Value.DayOfYear } into g
                select new
                {
                    iCount = g.Count(),
                    strDate = g.Key
                };

【问题讨论】:

  • linq2ent.. ..似乎某些日期功能被限制了,这就是为什么我猜这很难
  • 我可以使用 LogDate.Value.Day 但不能使用 LogDate.Value.ShortDateTime()

标签: linq entity-framework date grouping


【解决方案1】:

在 EF 核心中,您可以使用 DateTime.Date 获取 DateTime 值的日期部分。

在 EF6 中你可以使用DbFunctions.TruncateTime:

返回给定日期并清除时间部分

var q = from x in dc.ApplicationLogs
        let dt = x.LogDate.Date
        // EF6:let dt = DbFunctions.TruncateTime(x.LogDate)
        group x by dt into g
        select new
        {
            iCount = g.Count(),
            strDate = g.Key
        };

【讨论】:

  • 干杯。我花了一段时间在 Google 上搜索这个 -> 正是我需要的。
【解决方案2】:

您希望.Date 获得DateTime 的日期部分而不是DayOfyear,除非您故意尝试将每年的同一天放入组中。

【讨论】:

    【解决方案3】:

    你为什么使用:

        let dt = x.LogDate
        group x by new { dayofyear = dt.Value.DayOfYear } into g
    

    而不仅仅是:

        group x by x.LogDate.Value.DayOfYear into g
    

    我不确定这一点,但有可能在您的 group by 子句中使用类似的匿名对象会扰乱 L2S。

    【讨论】:

    • Line2Ent 不支持 dayofyear。 :(
    • 这有效.. 但仅适用于一个月内的数据 :( var q = from x in dc.ApplicationLogs group x by new { x.LogDate.Value.Day } into g select new { DayDate = g.Key.Day, iCount = g.Count() };
    • 如何将所有数据提取到 List<LogDate>,然后使用普通的旧 LINQ-to-Objects 进行分组?
    • 不知道该怎么做。我的意思是如何将 linq2ent 查询与 linqtoobjects 混合使用
    【解决方案4】:

    给你

    let d = new DateTime(n.time.Year, n.time.Month, n.time.Day) group n by d into grp select grp
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    相关资源
    最近更新 更多