【发布时间】:2013-06-17 13:02:02
【问题描述】:
我不知道如何正确表达这个问题,但我有:
var groups = data.GroupBy(x => new {x.EntityId, x.StartLocal = new {
var stamp = x.StartLocal;
stamp = stamp.AddHours(-(stamp.Hour % hours));
stamp = stamp.AddMinutes(-stamp.Minute);
stamp = stamp.AddMilliseconds(-stamp.Millisecond);
return stamp;
}})
.Select(...)
.ToList();
这不起作用(语法错误)。我首先想按entityId 分组,然后按名为StartLocal 的字段的小时分组,就像我每2 小时对结果进行分组一样:
Id = 1
Hour = 2
Hour = 4
Id = 2
Hour = 2
...
像这样。
我需要填写的内容:
DO obj = new DO
{
EntityId = pp.EntityId,
EntityCode = pp.EntityCode,
StartLocal = pp.StartLocal,
Volume = pp.Volume,
};
Volume 是需要聚合的。所以基本上 1000 个这些 DO 以数组的形式出现,然后它们被 EntityId 分割,然后被 StartLocal 的小时数分割……体积被聚合了 x 小时的价值,并且创建了相同的 DO……但现在很多少一些。
【问题讨论】:
-
那么“错误的语法”是错误信息吗?
-
与如何声明匿名类型无关,但它不值得引用,因为真正的问题是我不知道如何声明第二列来分组,其中包含的不仅仅是x.属性。
-
根据您想要的输出,您似乎只想对 ID 进行分组,而不是其他任何东西,并且您的时间操作都属于
GroupBy之后的Select。您是否真的想要深度为 3 的树,而不仅仅是深度为 2 的树。如果是这样,如果您相应地修改所需的输出将会有所帮助。
标签: c# linq group-by aggregate