我刚接触Linq to Object,对于在两个上下文中使用from
子句有一个问题:
1)像下面的查询一样执行交叉连接:
var q1 = from person in people
from job in jobs
select new {person, job}
2) 执行外连接
var q2 = from person in people
join pet in pets on person equals pet.Owner into gj
from subpet in gj
select new { OwnerName = person.FirstName, PetName = subpet.Name };
第二个from子句是作为交叉连接还是根据上下文进行评估?因为q1将产生people.Count * jobs.Count个元素,但q2只会产生people.Count个元素。
from
子句并不像交叉连接那样起作用,但是select
确实是。from
只是执行交叉连接的手段,因为它提供了序列中的元素。在第二个示例中,您将person-pet内部连接到gj,并使用第二个from
从结果集中选择每个元素,仅此而已。要执行左外连接,您应该将右值(来自gj集)替换为null,以表示没有宠物的人。 - Dmitry Polyanitsafrom
作为foreach循环,而第二个from
作为嵌套在第一个循环内部的foreach循环? - anouar.bagari