0
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我注意到有一个GroupMylambda 方法,但是有没有办法将列表分组Id,并使Bar属性成为Bar每个 id 的所有 s 的列表?

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

4

1 回答 1

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

虽然我觉得这有点难以阅读。

于 2012-12-11T15:48:46.490 回答