如何在没有ForEach的情况下从嵌套集合中过滤?

时间:2011-02-23 10:47:25

标签: c# linq collections nested iteration

我有一个实体说类型A,属性类型列表为B.类型B也有一个类型为List of C的属性。

我想在A的对象上应用过滤器,以便在List of C中只有C对象,其Selected属性为True。

这可以这样做:

A objA = A.ListB.ForEach(b => {b.ListC.RemoveAll(c => c.Selected == false);});

但我不必删除所有那些具有Selected = false的C对象。我只想过滤它们。

有什么想法吗?


更多解释:有一个类型为A的对象,其中包含B属性列表。在A的B列表的每个B对象中,存在C属性列表。 C对象具有Selected属性。现在,我需要的是 - 一个带有List of B的A的对象,其中B的C列表中的每一个只有那些具有Selected = true的C对象。 理想的输出是类型A.列表B不应仅被过滤列表C需要被过滤。

3 个答案:

答案 0 :(得分:2)

这个怎么样:

A.ListB.Where( b => b.ListC.Exists( c => c.Selected ) )

这是你想要的吗?

答案 1 :(得分:1)

如果需要包含所有选定C对象的列表,可以执行以下操作:

List<C> selectedC = A.ListB.SelectMany( b => b.ListC.Where( c => c.Selected)).ToList();

答案 2 :(得分:0)

var qry = from b in A.ListB
          select new {B=b,ListC=b.ListC.Where(x => x.Selected).ToList()};

请注意,这只是一个匿名元组;我们无法显示代码来重建A / B等,而无需更多关于代码结构,有什么道具等信息等等。