C# 在Enity框架中按小时分组记录并填补空白
之前和之后都有类似的问题,但两种解决方案都使用SQL。我想用代码解决这个问题 最简单的解决方案是运行:C# 在Enity框架中按小时分组记录并填补空白,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,之前和之后都有类似的问题,但两种解决方案都使用SQL。我想用代码解决这个问题 最简单的解决方案是运行: var q = from i in XXX.Table let dt = p.Date group i by new { y = dt.Year, m = dt.Month, d = dt.Day, h = dt.Hour} select g; 但我还有很多空白需要填补。您可以从服务器获取组并填补客户端的空白: var startDate = new DateTime
var q = from i in XXX.Table
let dt = p.Date
group i by new { y = dt.Year, m = dt.Month, d = dt.Day, h = dt.Hour}
select g;
但我还有很多空白需要填补。您可以从服务器获取组并填补客户端的空白:
var startDate = new DateTime(2014, 1, 2);
var endDate = new DateTime(2014, 1, 3);
var dict = (from c in YourTable
where c.YourDate >= startDate && c.YourDate <= endDate
let hours = DbFunctions.DiffHours(startDate, c.YourDate)
group c by hours into g
select new {Hour = g.Key, Count = g.Count()}).ToDictionary(r => r.Hour.Value, r => r.Count);
var result = Enumerable.Range(0, (int)(endDate - startDate).TotalHours).Select(h => new {Date = startDate.AddHours(h), Count = dict.ContainsKey(h) ? dict[h] : 0});
var startDate=新日期时间(2014,1,2);
var endDate=新的日期时间(2014年1月3日);
var dict=(来自表中的c
其中c.YourDate>=startDate和&c.YourDate r.Hour.Value,r=>r.Count);
var result=Enumerable.Range(0,(int)(endDate-startDate).TotalHours)。选择(h=>new{Date=startDate.AddHours(h),Count=dict.ContainsKey(h)?dict[h]:0});
这个查询将被组合成另一个查询,还是我们可以假设这个(以及填补的空白)将被具体化?换句话说,服务器是否必须生成填充?您的实体框架可以将p.Date
转换为SQL?@casperOne我喜欢将此查询用作子查询,因此答案是“是”,服务器应生成fills@SergeyBerezovskiy我想是的。我在DateTime
type@SergeyBerezovskiy你是对的,我没有检查就写了这段代码:)