2016-09-17 58 views
1

我從服務接收數據的格式如下:我應該用LINQ替換這些嵌套的foreach循環嗎?

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

我需要編寫返回所有FOOS在集裝箱的名稱的方法,與它們相關聯的酒吧的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循環來編寫它?
  • 有沒有很好的理由這樣做?

回答

5

這是LINQ的SelectMany的查詢語法,它允許您執行您所描述的內容。至於爲什麼你會這樣做,我個人覺得它更容易閱讀。

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