按日期排序和按日分组

时间:2013-08-01 10:43:16

标签: c# sql entity-framework datetime linq-to-entities

我有一个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类型),然后按天分组。 但是上面的查询没有向我提供例外结果。 我在那里错过了什么?

1 个答案:

答案 0 :(得分:0)

假设您正在使用日期和时间存储值,那么按它们分组几乎没有效果。要进行分组,您需要使用相同的值进行分组。

例如:

Id |  Date
---+------------------------
1  |  2013-01-01 1:23:45.333
2  |  2013-01-01 2:34:56.667

Date分组无济于事,因为值不同。相反,我需要按照更有意义的事情进行分组,也许是白天。

要在Entity Framework中执行此操作,请使用EntityFunctionsSqlFunctions类中的方法。例如:

from foo in context.Whatever
group foo by EntityFunctions.TruncateTime(foo.Date) into grp
...

现在您只按日期进行分组。由于这两行都在2013-01-01上,因此它们将组合在一起。