2015-04-17 153 views
0

我有一个类(classA),它具有另一个类(classB)的列表,而该列表又具有另一个类(classC)的列表。当ID属性匹配我正在搜索的内容时,我想要检索classC的特定实例。这是我目前所拥有的:基于类属性的LINQ选择列表元素

   ClassC foundC = null; 
       foreach (var a in aList) 
       { 
        foreach (var b in a.bList) 
        { 
         foreach (var c in b.cList) 
         { 
          if (c.IdProperty == searchId) 
          { 
           foundC = c; 
          } 
         } 
        } 
       } 

是否可以使用Linq执行此搜索?

回答

3
var c = aList 
    .SelectMany(_ => _.bList) 
    .SelectMany(_ => _.cList) 
    .FirstOrDefault(_ => _.IdProperty == searchId); 
3
var foundC = aList.SelectMany(a => a.bList).SelectMany(b => b.cList).FirstOrDefault(c => c.IdProperty == searchId); 
1

你可以使用嵌套SelectMany S + FirstOrDefault

ClassC foundC = aList.SelectMany(a => a.bList.SelectMany(ab => ab.cList)) 
    .FirstOrDefault(c => c.IdProperty == searchId); 
if(foundC != null) 
{ 
    // found one 
} 
相关问题