在Linq中进行加入时,例如
from c in customers join x in somelistofcustomers on x.Id equals c.Id
你会收到错误
x不在'equals'左侧的范围内。考虑交换'equals'
两侧的表达式
很简单,但是我想澄清一下为什么x不在左侧的范围内,但不知何故在equals
右侧的范围内
答案 0 :(得分:8)
这与LINQ由编译器扩展到底层扩展方法的方式有关。
您的查询正在翻译成:
customers.Join(somelistofcustomers, c => x.Id, x => c.Id, (c, x) => ...)
两个lambda表达式c => x.Id
& x => c.Id
明显将其局部变量超出范围。由于LINQ在实际调用中只是一个很好的糖涂层,编译器会正确地抱怨变量超出了范围。
答案 1 :(得分:2)
这只是一个约定,基本上连接的结构如下
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}
也是如此 - 您无法切换顺序,因为它们的位置在连接语法中是固定的。