LINQjoin ... into
和如何.DefaultIfEmpty()
表达左连接?
.DefaultIfEmpty()
只评估一次还是n次?
假设我们谈论的是 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
. 对于非空序列,这只会传递值。对于空序列,默认值被返回(一次)。
有关更多信息,请参阅我的 Edulinq 博客文章。