在linq连接中,equals的左侧和右侧之间有什么区别

Ral*_*ton 5 linq

在Linq做加入时如

from c in customers join x in somelistofcustomers on x.Id equals c.Id

你会得到错误的

x不在'equals'左侧的范围内.考虑交换'equals'两侧的表达式

这很简单,但我想澄清为什么x不在左侧的范围内,但不知何故在右侧的范围内 equals

Eni*_*ity 8

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

您的查询正在翻译成:

customers.Join(somelistofcustomers, c => x.Id, x => c.Id, (c, x) => ...)
Run Code Online (Sandbox Code Playgroud)

这两个lambda表达式c => x.Id:x => c.Id显然有自己的局部变量超出范围.由于LINQ在实际调用中只是一个很好的糖涂层,编译器会正确地抱怨变量超出范围.