2015-04-29 102 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