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

Jas*_*ban 1 c# linq

如何LINQ的join ... into.DefaultIfEmpty()合作,以表达左加入?

.DefaultIfEmpty()评估一次,还是n次?

Jon*_*eet 7

假设我们正在谈论LINQ to Objects,DefaultIfEmpty将在结果中对每个元素进行一次评估.它将在序列上进行评估,序列是与连接的"左"部分匹配的值组.所以如果我们有:

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

那么对于每个x值,都会有一个调用DefaultIfEmpty.对于非空序列,只传递值.对于空序列,将返回默认值(一次).

有关更多信息,请参阅我的Edulinq博客文章.