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

时间:2013-02-11 14:08:29

标签: 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());

现在我的问题:

是否为GroupBy记录了一些plussign(+)?

1 个答案:

答案 0 :(得分:7)

小心这个:) 例如,如果x.FIELD1x.FIELD2是字符串类型的属性,那么您只是按照连接两者的结果进行分组....这可能不是您想要的。同样适用于其他类型的课程,但仍然是字符串中的一个例子:

鉴于Field1 =“ABC”和Field2 =“DEF”,您的分组将使用“ABCDEF”键,对吧?

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

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

编辑:另一个快速说明:在您执行了GroupBy(没有投影)后,请查看您获得的Key值....它应该显示给您我的意思的一个例子。