Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ';左join'join。。。进入`和` DefaultIfEmpty()`工作?_C#_Linq - Fatal编程技术网

C# LINQ';左join'join。。。进入`和` DefaultIfEmpty()`工作?

C# LINQ';左join'join。。。进入`和` DefaultIfEmpty()`工作?,c#,linq,C#,Linq,LINQ的如何加入。。。进入和.DefaultIfEmpty()工作以表示左联接 .DefaultIfEmpty()只计算一次还是n次?假设我们讨论的是LINQ to对象,DefaultIfEmpty将对结果中的每个元素计算一次。它将在序列上求值,该序列是一组与联接的“左”部分匹配的值。因此,如果我们有: from x in foo join y in bar into z let g = z.DefaultIfEmpty() select new { x, g.Count() } 然后,对于

LINQ的
如何加入。。。进入
.DefaultIfEmpty()
工作以表示左联接


.DefaultIfEmpty()
只计算一次还是n次?

假设我们讨论的是LINQ to对象,
DefaultIfEmpty
将对结果中的每个元素计算一次。它将在序列上求值,该序列是一组与联接的“左”部分匹配的值。因此,如果我们有:

from x in foo
join y in bar into z
let g = z.DefaultIfEmpty()
select new { x, g.Count() }
然后,对于每个
x
值,将调用
DefaultIfEmpty
。对于非空序列,这将只传递值。对于空序列,将返回默认值(一次)


有关更多信息,请参阅。

假设我们讨论的是LINQ to对象,
DefaultIfEmpty
将对结果中的每个元素计算一次。它将在序列上求值,该序列是一组与联接的“左”部分匹配的值。因此,如果我们有:

from x in foo
join y in bar into z
let g = z.DefaultIfEmpty()
select new { x, g.Count() }
然后,对于每个
x
值,将调用
DefaultIfEmpty
。对于非空序列,这将只传递值。对于空序列,将返回默认值(一次)


有关更多信息,请参阅。

如何将
DefaultIfEmpty
设置为非直观?如果集合为空,则返回默认值;如果不是空,则仅返回原始集合。这是一种确保结果序列不为空的方法。它在连接操作中的每个序列上都被调用,只要输入序列至少有一个值,它就不会做很多事情。也许您应该使用方法语法而不是查询语法来编写它;有时候这对人们来说更容易理解。你是在问在LINQtoObjects中组连接的实现是什么吗?或者如何将组联接转换为方法调用?还是怎样“我很难弄清楚这里真正的问题是什么。”EricLippert-我首先想到的是Linq to objects。但是现在你问了,我很想知道linq IQueryProviders的答案是如何变化的。相关的post-how
DefaultIfEmpty
不直观吗?如果集合为空,则返回默认值;如果不是空,则仅返回原始集合。这是一种确保结果序列不为空的方法。它在连接操作中的每个序列上都被调用,只要输入序列至少有一个值,它就不会做很多事情。也许您应该使用方法语法而不是查询语法来编写它;有时候这对人们来说更容易理解。你是在问在LINQtoObjects中组连接的实现是什么吗?或者如何将组联接转换为方法调用?还是怎样“我很难弄清楚这里真正的问题是什么。”EricLippert-我首先想到的是Linq to objects。但既然你问了,我很想知道linq IQueryProviders的答案是如何变化的-