使用linq按时间戳日期和时间对数据进行分组

时间:2014-10-06 11:55:33

标签: c# linq linq-to-entities

我正在尝试将一些时间戳与下面的linq语句分组

        var ds = (from wl in dbEntities.tbl_weblog
                  group wl by new
                  {
                      wl.tms_stamp.Value.Date,
                      wl.tms_stamp.Value.TimeOfDay
                  } into dateGrp
                  select new
                  {
                      Date = dateGrp.Key.Date,
                      Time = dateGrp.Key.TimeOfDay,
                      HitCount = dateGrp.Count(),
                      TotalKB = dateGrp.Sum(m => m.int_bytes).Value / 1024
                  }
                      ).ToList();

        return Helpers.ToDataSet(ds);

但是我收到错误“ LINQ to Entities不支持指定的类型成员' Date '。仅支持初始值设定项,实体成员和实体导航属性。”。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

Linq-To-Entities没有DateTime.Date到SQL的映射。因此,您必须将其分解为年,月,日和小时以获得您正在寻找的结果。

var ds = (from wl in dbEntities.tbl_weblog
          group wl by new
             {
                 wl.tms_stamp.Value.Year,
                 wl.tms_stamp.Value.Month,
                 wl.tms_stamp.Value.Day,
                 wl.tms_stamp.Value.Hour
             } into dateGrp
          select new
          {
              Year = dateGrp.Year,
              Month= dateGrp.Month,
              Day= dateGrp.Day,
              Hour= dateGrp.Hour,
              HitCount = dateGrp.Count(),
              TotalKB = dateGrp.Sum(m => m.int_bytes).Value / 1024
          }).ToList();

然后,当您使用ds时,您可以将日期部分重新组合在一起。

foreach(var item in ds)
{
    var date = new DateTime(item.Year, item.Month, item.Day);
    var hour = item.Hour;
}