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