我的课程看起来像这样:
public class Foo
{
public List<Bar> Bars { get; set; }
// Other properties
}
public class Bar
{
public string Name { get; set; }
}
我想要做的是根据Foo
列表中匹配的名称对Bar
项进行分组。
一些例子:
(注意:我会在分组中使用Foo
中的其他属性。)
答案 0 :(得分:0)
第1步:使用Bar.Name
获取所有.SelectMany
。
foos.SelectMany(f => f.Bars.Select(b => b.Name))
第2步:按照步骤1中的名称进行分组,但现在只有名称,没有相应的Foo
,因此在第1步中我们需要Bar.Name
和Foo
一个新的对象。
最终查询如下:
var grouped = foos
.SelectMany(f => f.Bars
.Select(b => new { Name = b.Name, Foo = f }))
.GroupBy(o => o.Name, o => o.Foo);
您还可以在上一个查询步骤中使用.ToLookup
代替.GroupBy
。