LINQ-从包含三个层的列表中检索第三层对象列表

时间:2015-04-29 04:49:55

标签: c# 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查询?

3 个答案:

答案 0 :(得分:2)

使用SelectMany。

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

答案 1 :(得分:1)

当你得到类别b时,你似乎已经得到了分类

因此,我想这样搜索

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

答案 2 :(得分:0)

在您的第二个查询中存在问题,您再次从categoryB过滤值。 你的第二个查询需要像这样。

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