合并分组通用列表

时间:2012-12-11 15:45:15

标签: c# asp.net lambda

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的列表对于每个身份证?

因为现在我每行都有很多冗余数据。如果您希望我详细说明问题,请告诉我。

1 个答案:

答案 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)});

虽然我觉得有点难读。