Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我是否应该用LINQ替换这些嵌套的foreach循环,以及如何替换?_C#_Linq - Fatal编程技术网

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

C# 我是否应该用LINQ替换这些嵌套的foreach循环,以及如何替换?,c#,linq,C#,Linq,我从服务接收以下格式的数据: public class Foo { string Name; } public class Bar { int ID; List<Foo> Foos; } public class Container { List<Bar> Bars; } 这就是我想到的: IEnumerable<FooBar> FooBars(Container c) { foreach (var b in c.Ba

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

public class Foo
{
    string Name;
}
public class Bar
{
    int ID;
    List<Foo> Foos;
}
public class Container
{
    List<Bar> Bars;
}
这就是我想到的:

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};

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

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