这是一个linq健全性检查

时间:2014-04-04 17:27:46

标签: c# linq

我们说我有以下三个类: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;

1 个答案:

答案 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;序列

相关问题