开发者

Let clause as part of join clause

Why it is possible to use this:

from r1 in Enumerable.Range(1, 10)
join q1 in Enumerable.Range(1, 20) on r1 equals q1
select r1;

but not possible to use this:

from r1 in Enumerable.Range(1, 10)
let q = Enumerable.Range(1, 20)
join q1 in q on r1 equals q1
select r1;

The MSDN documentation on let clause lacks some details.

Update: I've just tried to make the expression more clearly readable. In my situation I have some methods chaining that I would like to put to the let 开发者_StackOverflowclause. Otherwise the join clause became too monstrous. As it is not possible to use the let clause (as Jon mentioned) I've introduced the outer variable, here:

IEnumerable<int> q = Enumerable.Range(1, 10);

from r1 in Enumerable.Range(1, 10)
join q1 in q on r1 equals q1
select r1;


Unlike SelectMany, a Join clause can't depend on the "current" value of the other range variables - so this will work:

from r1 in Enumerable.Range(1, 10)
let q = Enumerable.Range(1, 20)
from q1 in q where r1 == q1
select r1;

... but the join won't.

If you could elaborate on what you're trying to do, we may be able to help more.


AFAIK the join is evaluated BEFORE the let...

Here is blog entry on MSDN explaining this more elaborate - http://blogs.msdn.com/b/wesdyer/archive/2007/01/03/how-linq-to-objects-queries-work.aspx

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜