-1

我有一个 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 类型),然后按天分组。但是,上述查询没有为我提供异常结果。我在那里想念什么?

4

1 回答 1

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
...

现在您只按日期分组。由于两行都 on 2013-01-01,它们将被组合在一起。

于 2013-08-01T16:36:43.010 回答