LINQ的左连接`join ... into`和`DefaultIfEmpty()`是如何工作的?

时间:2013-05-09 19:38:54

标签: c# linq

LINQ的join ... into.DefaultIfEmpty()如何表达左连接?

.DefaultIfEmpty()只评估一次, n 次吗?

1 个答案:

答案 0 :(得分:7)

假设我们正在讨论LINQ to Objects,那么DefaultIfEmpty将在结果中的每个元素上进行一次评估。它将在序列上进行评估,序列是与连接的“左”部分匹配的值组。如果我们有:

from x in foo
join y in bar into z
let g = z.DefaultIfEmpty()
select new { x, g.Count() }

然后对于每个x值,将调用DefaultIfEmpty。对于非空序列,只传递值。对于空序列,将返回默认值(一次)。

有关详细信息,请参阅my Edulinq blog post on it