假设我有以下三个类:Holder 包含容器列表,容器包含子容器列表。我是否使用正确的 linq 从父持有者中提取所有空的子容器?
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;
不完全是。这是SelectMany
的工作:
holder.containers.SelectMany(c => c.subContainers.Where(sc => sc.Empty))
更新。好吧,我必须承认一个错误。您的呼叫和SelectMany
版本相同。以下是Jon Skeet对此的评价:
次要"从"从句
我们已经看到,介绍性的"从"子句实际上并不是 转换为方法调用,但任何后续调用都是。语法 仍然相同,但翻译使用 SelectMany。在许多情况下 这就像交叉连接(笛卡尔积)一样使用,但它更多 比这更灵活,正如"内部"序列引入的那样 次要"from"子句可以依赖于来自 "外"序列。