LINQ的join ... into
和.DefaultIfEmpty()
如何表达左连接?
.DefaultIfEmpty()
只评估一次, n 次吗?
答案 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。