Пусть предложение как часть предложения соединения - PullRequest
0 голосов
/ 12 сентября 2011

Почему можно использовать это:

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;

В документации MSDN на let clause отсутствуют некоторые детали.

Обновление: Я просто попытался сделать выражение более четким. В моей ситуации у меня есть несколько методов цепочки, которые я хотел бы поместить в let clause. В противном случае предложение объединения стало слишком чудовищным. Поскольку невозможно использовать let clause (как упоминал Джон), я ввел внешнюю переменную здесь:

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

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

Ответы [ 2 ]

3 голосов
/ 12 сентября 2011

В отличие от SelectMany, предложение Join не может зависеть от "текущего" значения других переменных диапазона - поэтому это будет работать:

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

... но соединение выиграно't.

Если бы вы могли уточнить, что вы пытаетесь сделать, мы могли бы помочь вам больше.

0 голосов
/ 12 сентября 2011

AFAIK join оценивается ДО let ...

Вот запись в блоге на MSDN, объясняющая это более подробно - http://blogs.msdn.com/b/wesdyer/archive/2007/01/03/how-linq-to-objects-queries-work.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...