将列表转换为组

时间:2018-02-02 09:53:22

标签: c# linq

我有一个问题:我想使用这样的代码:

var groups = shouldBeGroup ? items.GroupBy(p => p.Prop) : <a group with all items>
foreach(var gr in groups)...

如何实施第二部分?我想要一个包含所有项目的组,但GroupBy会根据指定的属性返回多个组。

感谢。

1 个答案:

答案 0 :(得分:2)

items.Group(p => p.Prop)

这将返回IEnumerable<IGrouping<TProp,TItem>>

的集合

其中TProp是您要分组的Prop属性的类型,TItem是项目的类型。

因此groups变量的类型就是IEnumerable<IGrouping<TProp,TItem>>,因此您分配给它的任何内容都必须属于该类型。因此,如果shouldBeGroup为真,那么您评估items.GroupBy(p => p.Prop);符合(实际上它指示)所需的类型。

因此,如果shouldBeGroups为false,则需要一个返回相同类型IEnumerable<IGrouping<TProp,TItem>>的表达式的表达式    items.GroupBy(i => //here you need to provide a constant value of the same type of p.Prop)

所以一个例子假设p.Prop是string

类型

我们会这样做

var grouped = shouldBeGrouped ? items.GroupBy(p => p.Prop) : items.GroupBy(p => "stringConstant");

因为您为每个项目提供一个常量值,它们将出现在同一个组中。但请记住,p.Prop的类型将指定第二个GroupBy表达式中常量值所需的类型