用于展平的Lambda表达式

时间:2013-11-06 18:26:25

标签: c#

Class A
{

}

Class B: A
{

}

Class C: A
{
   B children;
}

我有一个A的集合,其中包含B和C成员。

例如

collection  A
             -B
             -B
             -C
               -B
               -B

我要找的结果是:

B
B
B
B

我需要使用lambda表达式从中提取所有B类型的集合。想法?

2 个答案:

答案 0 :(得分:3)

我会做那样的事。

首先,获取列表中B的元素。

然后,与列表中C的元素结合,并选择他们的孩子(这是B)

var list = yourList.OfType<B>()
           .Union(yourList.OfType<C>().Select(x => x.children);

但是你的样本不清楚(或者你的伪模型不正确):孩子是一个属性,还是一个集合?

如果是集合,请使用SelectMany代替Select

答案 1 :(得分:0)

您正在寻找的是SelectMany。

http://pastebin.com/ZMD0NLZK

这是一个简单的演示,我回过头来演示Select和SelectMany之间的区别。

编辑:进一步观察后,看起来你真正想要的可能是.OfType<B>()