我应该用LINQ替换这些嵌套的foreach循环,以及如何?

时间:2016-09-17 00:53:00

标签: c# linq

我以下列格式从服务接收数据:

public class Foo
{
    string Name;
}
public class Bar
{
    int ID;
    List<Foo> Foos;
}
public class Container
{
    List<Bar> Bars;
}

我需要编写一个方法,在以下类中返回Container中所有Foos的Names,并与其关联Bar的ID配对:

public class FooBar
{
    int BarID;
    Foo Name;
}

这就是我提出的:

IEnumerable<FooBar> FooBars(Container c)
{
    foreach (var b in c.Bars)
    {
        foreach (var f in b.Foos)
        {
            yield return new FooBar() { BarID = b.ID; Name = f.Name; }
        }
    }
}

我有两个问题:

  • 我如何使用LINQ而不是嵌套的foreach循环来编写它?
  • 有没有充分理由这样做?

1 个答案:

答案 0 :(得分:5)

这是LINQ的SelectMany的查询语法,它允许您执行您所描述的内容。至于你为什么要这样做,我个人觉得它更容易阅读。

from b in c.Bars
from f in b.Foos
select new FooBar {BarID = b.ID, Name = f.Name};