我应该用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的SelectMany的查询语法,它允许您执行所描述的操作。至于为什么要这样做,我个人认为这样更容易读懂。
from b in c.Bars
from f in b.Foos
select new FooBar {BarID = b.ID, Name = f.Name};