Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
什么';在LINQ连接中,等号的左侧和右侧之间的差是多少_Linq - Fatal编程技术网

什么';在LINQ连接中,等号的左侧和右侧之间的差是多少

什么';在LINQ连接中,等号的左侧和右侧之间的差是多少,linq,Linq,在Linq中执行连接时,例如 来自c in客户将x加入x上的某些客户列表中。Id等于c.Id 你会得到错误的 x不在“等于”左侧的范围内。考虑交换“相等”< /P>两边的表达式。 这很简单,但我想澄清一下为什么x不在左侧的范围内,但不知何故在equals的右侧的范围内。这只是一个约定,基本上连接的结构如下 from identifier in {outer-sequence} join identifier2 in {inner-sequence} on {outer-key-selecto

在Linq中执行连接时,例如

来自c in客户将x加入x上的某些客户列表中。Id等于c.Id

你会得到错误的

x不在“等于”左侧的范围内。考虑交换“相等”< /P>两边的表达式。
这很简单,但我想澄清一下为什么x不在左侧的范围内,但不知何故在
equals

的右侧的范围内。这只是一个约定,基本上连接的结构如下

from identifier in {outer-sequence} 
join identifier2 in {inner-sequence} 
on {outer-key-selector} equals {inner-key-selector}

identifier
{outer key selector}
是成对的,
identifier2
{inner key selector}
-不能切换顺序,因为它们的位置在联接语法中是固定的

这与编译器将LINQ扩展到底层扩展方法的方式有关

您的查询正在转换为:

customers.Join(somelistofcustomers, c => x.Id, x => c.Id, (c, x) => ...)
两个lambda表达式
c=>x.Id
&
x=>c.Id
显然其局部变量超出范围。由于LINQ只是实际调用上的一层糖衣,编译器会正确地抱怨变量超出范围