也许在Linq找到了一个功能.具有多个字段的Groupby

Tob*_* 72 3 c# linq group-by

这两行似乎做了同样的事情.可以使用plussign(+)代替匿名类型.

var newlist1 = list.GroupBy(x => x.FIELD1 + x.FIELD2).Select(y => y.First());

var newlist2 = list.GroupBy(x => new {x.FIELD1, x.FIELD2}).Select(y => y.First());
Run Code Online (Sandbox Code Playgroud)

现在我的问题:

是否为GroupBy记录了plussign(+)的内容?

小智 7

小心这个:)例如x.FIELD1,如果x.FIELD2是类型字符串的属性,你只是通过连接两个的结果分组....这可能不是你想要的.同样适用于其他类型的课程,但仍然是字符串中的示例:

给定Field1="ABC"和Field2="DEF",你的分组将使用"ABCDEF"键,对吗?

那么如果你有Field1="AB"和Field2="CDEF"怎么办?非常不同的价值观,但你的分组仍然是"ABCDEF"......

您应该坚持使用匿名类型进行分组(仅在方法中使用),或者在外部需要时,使用新的类,结构或使用元组.

编辑:另一个快速说明:执行完GroupBy(没有投影)后,看看你得到的关键值......它应该向你展示我的意思的一个例子.