我有一个sql表,它提供了历史性的能量消耗值。 现在我需要执行一些查询以获得按小时,日,周,月和年的统计数据,当然每个查询除外。 查询的一个例子是:
from c in context.ConsumptionSet
join e in context.EquipmentSet on c.EquipmentID equals e.EquipmentID
orderBy c.Date
group new { c, e } by c.Date into grp
select new
{
date = grp.Key.Day,
value = grp.GroupBy(i => i.e.EquipmentID).Sum(g => g.Max(i => i.c.Value))
})
你可以看到,我希望列表首先按日期排序(具有DateTime类型),然后按天分组。 但是上面的查询没有向我提供例外结果。 我在那里错过了什么?
答案 0 :(得分:0)
假设您正在使用日期和时间存储值,那么按它们分组几乎没有效果。要进行分组,您需要使用相同的值进行分组。
例如:
Id | Date
---+------------------------
1 | 2013-01-01 1:23:45.333
2 | 2013-01-01 2:34:56.667
按Date
分组无济于事,因为值不同。相反,我需要按照更有意义的事情进行分组,也许是白天。
要在Entity Framework中执行此操作,请使用EntityFunctions
或SqlFunctions
类中的方法。例如:
from foo in context.Whatever
group foo by EntityFunctions.TruncateTime(foo.Date) into grp
...
现在您只按日期进行分组。由于这两行都在2013-01-01
上,因此它们将组合在一起。