2015-02-10 148 views
3

讓所有孩子的記錄,我有兩個型號:LINQ - 所有父母

class Foo 
{ 
    public List<Bar> Bars { get; set; }  
} 

class Bar 
{ 
    public int Value { get; set; }  
} 

具有List<Foo>一個例子,我怎樣才能得到使用LINQ查詢所有Value

謝謝大家

回答

12

SelectMany通常是扁平化層級的方式,因此:

var values = myList.SelectMany(foo => foo.Bar) 
        .Select(bar => bar.Value); 

SelectMany會給你一個IEnumerable<Bar>,然後Select項目是Bar對象之間的Value財產的順序,返回IEnumerable<int>

作爲查詢表達式,這將是:

var values = from foo in myList 
      from bar in foo.Bar 
      select bar.Value; 
6

我建議你改變List<Bar>屬性名稱設置爲Bars。並且首先使用SelectMany()。它將序列的每個元素投影到一個IEnumerable<T>,並將結果序列展平成一個序列。然後使用Select()按照您的意願投影新序列的每個元素。

var result = myList.SelectMany(x => x.Bars).Select(x => x.Value).ToList(); 
2

使用SelectMany而不是Select

var result = LIST1.SelectMany(x => x.LIST2.Select(y => y.Value)).Tolist();