List<Foo> fooList = new List<Foo>();
fooList.Add(new Foo(){
Id = 1,
Bar = 1,
Blah = 1
});
fooList.Add(new Foo(){
Id = 1,
Bar = 2,
Blah = 1
});
fooList.Add(new Foo(){
Id = 2,
Bar = 1,
Blah = 2
});
如果我按fooList
属性对Id
进行分组,则除Bar
之外的所有属性对于每个组都相同。我注意到有一个GroupMy
lambda方法,但有没有办法按Id
对列表进行分组,并使Bar
属性成为所有Bar
s的列表对于每个身份证?
因为现在我每行都有很多冗余数据。如果您希望我详细说明问题,请告诉我。
答案 0 :(得分:2)
使用GroupBy扩展名来确定元素选择器:
var query = fooList.GroupBy(f => f.Id, f => f.Bar);
// Iterate over each grouping in the collection.
foreach (var group in query)
{
// Print the key value.
Console.WriteLine(group.Key);
// Iterate over each value in the
// grouping and print the value.
foreach (int bar in group)
Console.WriteLine(" {0}", bar);
}
或者如果您希望Bar
成为显式属性:
var query = fooList.GroupBy(
f => f.Id,
(id, foos) => new {Id = id, Bars = foos.Select(f=>f.Bar)});
虽然我觉得有点难读。