如何使用Entity Framework每周获取聚合数据

Fai*_* Mq 1 linq entity-framework aggregate sum

我有一个名为"VideoData"的后端表,其中包含以下形式的数据:

    VideoID       RecordingStarted         RecordingEnded
    ==============================================================
    abc123        2013-03-01 15:30:00      2013-03-01 15:40:00        
    def123        2013-03-06 12:00:00      2013-03-06 12:40:00
    ijk123        2013-03-10 11:00:00      2013-03-10 11:05:00
    klm123        2013-03-12 10:05:00      2013-03-12 10:25:00
    And list goes on .......
    .......................
    .............................
Run Code Online (Sandbox Code Playgroud)

使用实体框架我希望获得例如2013年3月捕获的视频总时数,以便捕获视频的总小时数为Weekwise.以下列方式示例:

    Mar 1, 2013     Mar 8, 2013      Mar 15, 2013     Mar 22, 2013
   ================================================================
   500              300              350              200
Run Code Online (Sandbox Code Playgroud)

我搜索了很多,但无法弄清楚如何完全做到这一点.请指导.谢谢你的帮助.

Ger*_*old 6

我讨厌推翻Ilya出色的工作(对不起伙伴,至少我赞成你),但由于这是实体框架,因此可以让数据库通过使用SqlFunctions在一个查询中完成工作:

context.Videos.Select(t => new
  {
      Year = SqlFunctions.DatePart("yyyy", t.RecordingStarted),
      Week = SqlFunctions.DatePart("ww", t.RecordingStarted),
      Hours = SqlFunctions.DateDiff("hh", t.RecordingStarted, t.RecordingEnded)
  })
.GroupBy(x => new { x.Year, x.Week} )
.Select (x => new { x.Key.Year, x.Key.Week, TotalHours = x.Sum(p => p.Hours)} )
Run Code Online (Sandbox Code Playgroud)

输出将是类似的

2013  9 500
2013 10 300
...
Run Code Online (Sandbox Code Playgroud)

在Sql Server中,从年份+周到日期是非常困难的.如果这确实是一个要求,您可以考虑建立一个参考表,其中包含年份+周数和第一天的日期.或者获取内存中的数据(.ToList())并使用C#转换数据.