我们说我有以下三个类:Holder包含Containers列表,Container包含SubContainers列表。我是否使用适当的linq从父级Holder中提取所有空的SubContainer?
class Holder
{
List<Container> containers = new List<Containter>();
public Holder()
{
}
}
class Container
{
List<SubContainer> subContainers = new List<SubContainer>();
public Container()
{
}
}
class SubContainer
{
bool Empty;
public SubContainer()
{
}
}
var query =
from a in Holder.containers
from b in a.subContainers
where b.Empty
select b;
答案 0 :(得分:4)
不完全。这是SelectMany
的作业:
holder.containers.SelectMany(c => c.subContainers.Where(sc => sc.Empty))
更新。嗯,我必须承认错误。您的通话和SelectMany
版本相同。以下是Jon Skeet says about this:
中学&#34;来自&#34;条款
我们已经看到了介绍&#34;来自&#34;条款实际上并非如此 转换为方法调用,但任何后续的调用。语法 仍然是相同的,但翻译使用SelectMany。在许多情况下 这就像交叉连接(笛卡尔积)一样使用,但它更多 比那更灵活,因为&#34;内部&#34;由序列引入的序列 中学&#34;来自&#34;子句可以取决于来自的当前值 &#34;外&#34;序列