按复杂选择器分组

时间:2017-07-24 03:11:36

标签: c# linq

我的课程看起来像这样:

public class Foo
{
    public List<Bar> Bars { get; set; }

    // Other properties
}

public class Bar
{
    public string Name { get; set; }
}

我想要做的是根据Foo列表中匹配的名称对Bar项进行分组。

一些例子:

  • Foo1 with Bars {Bar1,Bar2}&amp; Foo2 with Bars {Bar1,Bar2} =&gt; 2 基
  • Foo1 with Bars {Bar1,Bar2}&amp; Foo2 with Bars {Bar2,Bar3} =&gt; 3组
  • Foo1 with Bars {Bar1,Bar2}&amp; Foo2 with Bars {Bar3,Bar4} =&gt; 4组

(注意:我会在分组中使用Foo中的其他属性。)

1 个答案:

答案 0 :(得分:0)

第1步:使用Bar.Name获取所有.SelectMany

foos.SelectMany(f => f.Bars.Select(b => b.Name))

第2步:按照步骤1中的名称进行分组,但现在只有名称,没有相应的Foo,因此在第1步中我们需要Bar.NameFoo一个新的对象。

最终查询如下:

var grouped = foos
    .SelectMany(f => f.Bars
        .Select(b => new { Name = b.Name, Foo = f }))
    .GroupBy(o => o.Name, o => o.Foo);

您还可以在上一个查询步骤中使用.ToLookup代替.GroupBy