C# 合并分组的通用列表 List傻瓜列表=新建列表(); 添加(新的Foo(){ Id=1, 巴=1, 布拉赫=1 }); 添加(新的Foo(){ Id=1, 巴=2, 布拉赫=1 }); 添加(新的Foo(){ Id=2, 巴=1, 布拉赫=2 });

C# 合并分组的通用列表 List傻瓜列表=新建列表(); 添加(新的Foo(){ Id=1, 巴=1, 布拉赫=1 }); 添加(新的Foo(){ Id=1, 巴=2, 布拉赫=1 }); 添加(新的Foo(){ Id=2, 巴=1, 布拉赫=2 });,c#,asp.net,lambda,C#,Asp.net,Lambda,如果我按Id属性对我的dublist进行分组,则除了Bar之外的所有属性对于每个组都是相等的。我注意到有一个GroupMylambda方法,但是有没有办法按Id对列表进行分组,并使Bar属性成为每个Id的所有Bar的列表 因为现在我每行都有很多冗余数据。如果您想让我详细说明问题,请告诉我。使用允许您确定元素选择器的扩展名: List<Foo> fooList = new List<Foo>(); fooList.Add(new Foo(){ Id = 1,

如果我按
Id
属性对我的
dublist
进行分组,则除了
Bar
之外的所有属性对于每个组都是相等的。我注意到有一个
GroupMy
lambda方法,但是有没有办法按
Id
对列表进行分组,并使
Bar
属性成为每个Id的所有
Bar
的列表

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

使用允许您确定元素选择器的扩展名:

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
});
或者,如果希望
Bar
成为显式属性:

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
是一个
int
,那么查询应该如何将其更改为
IEnumerable
?(“是否有任何方法可以按Id对列表进行分组,并使Bar属性成为每个Id的所有条的列表”)@TimSchmelter将类型更改为
动态
?您可以这样做:
愚人节.ToLookup(x=>x.Id,x=>x.Bar)
Hmm,我正在按照我的意愿对
Bar
值进行排序,但是每一行的其余属性呢?@Johan这是一个普通的
GroupBy
(没有元素选择器)会给你的。这可能是我用我有点糟糕的解释所能得到的最接近的:)谢谢
var query = fooList.GroupBy(
    f => f.Id, 
    (id, foos) => new {Id = id, Bars = foos.Select(f=>f.Bar)});