2015-04-14 3 views
1

Ниже приведена простая форма SelectMany(). Как можно вообще преобразовать это в синтаксис запроса?Преобразование простого SelectMany в синтаксис запроса

var array = new string[] { "Shaun", "Luttin" }; 
array 
    .SelectMany(
     s => s 
    ); 

Самое лучшее, что я могу сделать, производит такой же результат, но вводит новую переменную c ...

var query = 
    from s in array.AsQueryable() 
    from c in s 
    select c; 

... и приводит к следующему беглом синтаксисом.

array 
    .SelectMany (
     s => s, 
     (s, c) => c 
    ); 

Re: Возможное Дублирование

Я прочитал ответы на Is there a C# LINQ syntax for the Queryable.SelectMany() method?Боится переводческая ответы не компилировать обратно к исходному беглому синтаксису.

+3

Выражения запроса имеют свободный эквивалент. Но не все быстрые вызовы методов имеют понимание запроса, с которым они совершают поездку туда и обратно. –

ответ

3

Компилятор выполняет перевод, чтобы включить синтаксис запроса в синтаксис метода. Подробности указаны в разделе 7.6.12 спецификации C# 5. Быстрый поиск поворачивает вверх только пару переводов, которые могут привести к вызову SelectMany, все в разделе 7.6.12.4:

Выражение запроса со вторым из пункта сопровождаемого выберите пункта:
от x1 в е1
от х2 в e2
выберите v
переводится в (e1) . SelectMany(x1 => e2 , (x1 , x2) => v)

и

Выражение запроса со вторым из пункта а затем нечто иное, чем ЗЕЬЕСТ:
от x1 в e1
от х2 в e2
...
переводится в
from * in (e1) . SelectMany(x1 => e2 , (x1 , x2) => new { x1 , x2 }) …

Так что, похоже, нет перевода, в результате чего возникает другая перегрузка SelectMany.

+0

, очевидно, если '...' включает 'группу' без следующего' from', что предотвратит вызов 'SelectMany'. – NetMage

Смежные вопросы