我应该用LINQ替换这些嵌套的foreach循环吗?

本文关键字:foreach 循环 嵌套 LINQ 替换 我应该 | 更新日期: 2023-09-27 18:07:31

我从一个服务接收以下格式的数据:

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

我需要在下面的类中编写一个方法,该方法返回容器中所有foo的名称,并与它们相关联的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循环?
  • 这样做有什么好的理由吗?

我应该用LINQ替换这些嵌套的foreach循环吗?

这是LINQ的SelectMany的查询语法,它允许您执行所描述的操作。至于为什么要这样做,我个人认为这样更容易读懂。

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