在做Linq中的聯接如什麼在LINQ左側,等號右邊的區別加入
from c in customers join x in somelistofcustomers on x.Id equals c.Id
,你會得到錯誤
x是不在'等於'左側的範圍內。考慮交換對兩邊的表達式「等於」
很簡單的事,但我想澄清爲什麼x是不在範圍內左側,但不知何故,在範圍上的equals
右側
在做Linq中的聯接如什麼在LINQ左側,等號右邊的區別加入
from c in customers join x in somelistofcustomers on x.Id equals c.Id
,你會得到錯誤
x是不在'等於'左側的範圍內。考慮交換對兩邊的表達式「等於」
很簡單的事,但我想澄清爲什麼x是不在範圍內左側,但不知何故,在範圍上的equals
右側
這是關於LINQ由編譯器擴展到底層擴展方法的方式。
您的查詢被翻譯成:
customers.Join(somelistofcustomers, c => x.Id, x => c.Id, (c, x) => ...)
兩個lambda表達式c => x.Id
& x => c.Id
顯然有自己的局部變量超出範圍。由於LINQ在實際調用時只是一個很好的糖衣,編譯器正確地抱怨變量超出了範圍。
這只是一個慣例,基本結構的連接是如下
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}
- 你不能切換奧德r,因爲它們的位置在連接語法中是固定的。