// Query expression
from parent in adults
from child in parent.Children
where child.Gender == Gender.Male
select child.Name + " is a son of " + parent.Name
// Translation (using z for the transparent identifier)
adults.SelectMany(parent => parent.Children,
(parent, child) => new { parent, child })
.Where(z => z.child.Gender == Gender.Male)
.Select(z => z.child.Name + " is a son of " + z.parent.Name;
4条答案
按热度按时间qnyhuwrf1#
多个“from”语句被认为是复合linq语句。它们就像嵌套的foreach语句。
字符串
这句话可以改写为:
型
4c8rllxm2#
这将被转换为一个
SelectMany()
调用。它本质上是一个交叉连接。字符串
Jon Skeet在他的博客上谈到了这一点,作为Edulinq series的一部分。
tf7tbtn23#
您列出的代码:
字符串
.将在
company
变量中生成每个公司的每个员工的列表。如果一个员工为两家公司工作,他们将被两次包含在列表中。这里唯一可能发生的“join”是当您说
c.Employees
时。在SQL支持的提供程序中,这将转换为从Company
表到Employee
表的内部join。然而,double-
from
结构通常用于手动执行“连接”,如下所示:型
这将与您发布的代码具有类似的效果,根据
employees
变量包含的内容,可能会有细微的差异。这也相当于以下join
:型
但是,如果您想要一个笛卡尔积,您可以删除
where
子句(为了使它有价值,您可能还想稍微修改select
)。型
最后一个查询将提供给予公司和雇员的所有可能的组合。
oogrdqng4#
所有第一组对象将与所有第二组对象连接。例如,以下测试将通过...
字符串