C# 这是linq的健康检查
假设我有以下三个类:Holder包含容器列表,Container包含子容器列表。我是否使用适当的linq从父持有者中提取所有空的子容器C# 这是linq的健康检查,c#,linq,C#,Linq,假设我有以下三个类:Holder包含容器列表,Container包含子容器列表。我是否使用适当的linq从父持有者中提取所有空的子容器 class Holder { List<Container> containers = new List<Containter>(); public Holder() { } } class Container { List<SubContainer> subContaine
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;
类持有者
{
列表容器=新列表();
公共持有人()
{
}
}
类容器
{
列表子容器=新列表();
公共容器()
{
}
}
等级分包商
{
布尔空;
公共分包商()
{
}
}
变量查询=
从容器中的容器中取出
a.分包商中的b
b.空的
选择b;
不太好。这是一项针对SelectMany
的作业:
holder.containers.SelectMany(c => c.subContainers.Where(sc => sc.Empty))
更新。嗯,我必须承认一个错误。您的通话和aSelectMany
版本相同。以下是Jon Skeet的观点:
第二“from”从句
我们已经看到,介绍性的“from”子句实际上不是
转换为方法调用,但任何后续调用都是。语法
仍然是一样的,但是翻译使用了SelectMany。在许多情况下
这就像交叉连接(笛卡尔积)一样使用,但它更简单
比这更灵活,因为“内部”序列由
次要的“from”子句可以取决于
“外部”序列
不完全是。这是一项针对
SelectMany
的作业:
holder.containers.SelectMany(c => c.subContainers.Where(sc => sc.Empty))
更新。嗯,我必须承认一个错误。您的通话和aSelectMany
版本相同。以下是Jon Skeet的观点:
第二“from”从句
我们已经看到,介绍性的“from”子句实际上不是
转换为方法调用,但任何后续调用都是。语法
仍然是一样的,但是翻译使用了SelectMany。在许多情况下
这就像交叉连接(笛卡尔积)一样使用,但它更简单
比这更灵活,因为“内部”序列由
次要的“from”子句可以取决于
“外部”序列
谢谢你,安德烈。请您解释一下SelectMany的结果会有什么不同/为什么不同?如果您只使用select,那么您选择的是一组集合。选择Many将它们合并为一个。确定。假设我希望在可观察的收集中使用。好奇的是,如果我调用observetecollection collection=newobservetecollection(query),查询的使用会起作用吗@philorube,实际上我错了,您的版本与
SelectMany
相同-事实上,这是SelectMany
call@philorube,对于可观察到的收集,应该没有区别,只要确保在需要时返回到可观察到的收集
,谢谢,Andrei。请您解释一下SelectMany的结果会有什么不同/为什么不同?如果您只使用select,那么您选择的是一组集合。选择Many将它们合并为一个。确定。假设我希望在可观察的收集中使用。好奇的是,如果我调用observetecollection collection=newobservetecollection(query),查询的使用会起作用吗@philorube,实际上我错了,您的版本与SelectMany
相同-事实上,这是SelectMany
call@philorube,对于可观察到的收集,应该没有区别,只要确保在需要时返回到可观察到的收集