2015-04-29 101 views
1

我有一個類結構,如下所示。LINQ-從包含三層的列表中檢索對象的第三層列表

CategoryA 
    { 
     CategoryB 
     { 
       CategoryC 
       { 

       } 
     } 

    } 

我有一個LINQ查詢來獲取對象列表。

var ls = CategoryA.CategoryB.Where(x => x.CategoryBObjectId == someId); 

這將返回一個CategoryB對象的列表。

然後我想要一些CategoryC對象。

var ls2= ls.Where(x=>x.Any(y=>y.CategoryCObjectId==someAnotherID)) 

但是,ls2返回的是CategoryB對象。

我想要的是滿足指定條件的CategoryC對象列表。

任何人都可以幫助我相應地更改LINQ查詢?

+0

您需要說明的是,ls2已經是指定條件的CategoryC列表。 – Shoe

回答

2

使用的SelectMany。

var data = CategoryA.CategoryB 
    .Where(b => b.CategoryBObjectId == someBid) 
    .SelectMany(b => b.CategoryC) 
    .Where(c => c.CategoryCObjectId == someCid) 
    .ToList(); 
+0

謝謝!這幫助了我。 –

1

它看起來像你已經拿到範疇上的c當你獲得B類

所以不是尋找這樣我覺得

var ls2= ls.Where(x=>x.Any(y=>y.CategoryC.CategoryCObjectId==someAnotherID)) 
0

有一個在你的第二個問題的查詢,你又來從類別b篩選值。 你的第二個查詢需要這樣做。

var ls2= ls.CategoryC.Where(x => x.CategoryBObjectId == someId); 
+0

ls是一個IEnumerable,所以它不會有屬性CategoryC。 – Maarten