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)
我搜索了很多,但无法弄清楚如何完全做到这一点.请指导.谢谢你的帮助.
我讨厌推翻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#转换数据.
| 归档时间: |
|
| 查看次数: |
1806 次 |
| 最近记录: |