2015-09-04 103 views
5
Top Tier Object 
     SubTier Objects 
      SubSubTier Objects 1.1,1.2,1.3 : SubTierId = 2 
      SubSubTier Objects 2.1,2.2,1.3 : SubTierId = 3 
     SubTier Objects 
      SubSubTier Objects 3.1,3.2,3.3 : SubTierId = 1 
      SubSubTier Objects 4.1,4.2,4.3 : SubTierId = 2 

预期的最终结果是获得一个IEnumerable,其中包含表示每个子层的SubTierId的1.2,2.3,3.1,4.2。如何使用linq获取基于值的子对象?

SubSubTiers mySubSubTier = allTiers.Select(topTier => 
      topTier.SubTiers.Where(sbTier => sbTier.Id == topTier.SubTierId)); 

但是会发生什么是我得到这种返回类型。

IEnumerable<IEnumerable<SubSubTier>> 

什么是最好的方式,使我刚刚得到的SubSubTierIEnumerable

+2

可以使用,而不是选择 – wudzik

+0

是我的答案有帮助的SelectMany?你有其他问题吗? – wudzik

+0

是的,这个伎俩只是没有回来。谢谢一堆! :) – MichaelChan

回答

4

可以使用SelectMany,而不是选择

SubSubTiers mySubSubTier = allTiers.SelectMany(topTier => 
     topTier.SubTiers.Where(sbTier => sbTier.Id == topTier.SubTierId)); 

将选择subtiers到合并IEnumerable代替的IEnumerablesIEnumerable