为什么可以使用它:
from r1 in Enumerable.Range(1, 10)
join q1 in Enumerable.Range(1, 20) on r1 equals q1
select r1;
但不可能使用它:
from r1 in Enumerable.Range(1, 10)
let q = Enumerable.Range(1, 20)
join q1 in q on r1 equals q1
select r1;
let clause
上的MSDN documentation缺少一些细节。
更新
我只是试着让表达更清晰可读。在我的情况下,我有一些方法链接,我想把它放到let clause
。否则,join子句变得太可怕了。因为不可能使用let clause
(如Jon所提到的)我引入了外部变量,这里:
IEnumerable<int> q = Enumerable.Range(1, 10);
from r1 in Enumerable.Range(1, 10)
join q1 in q on r1 equals q1
select r1;
答案 0 :(得分:3)
与SelectMany
不同,Join
子句不能依赖于其他范围变量的“当前”值 - 所以这将起作用:
from r1 in Enumerable.Range(1, 10)
let q = Enumerable.Range(1, 20)
from q1 in q where r1 == q1
select r1;
...但是加入不会。
如果你能详细说明你想要做什么,我们可以提供更多帮助。
答案 1 :(得分:0)
AFAIK在join
...
let
以下是MSDN上的博客文章,解释了这一点 - http://blogs.msdn.com/b/wesdyer/archive/2007/01/03/how-linq-to-objects-queries-work.aspx