2010-06-25 5 views
0

Я думаю, было бы полезно иметь препроцессор linq, где он может «предварительно обработать» ваше выражение linq в обычные операторы C#, такие как .Select() .Group() и т. Д. Это было бы полезно для изучения того, что происходит за кулисами в linq, обучение linq или отладка сложного выражения linq. Существует ли такой инструмент или средство? Я не мог найти это в LinqPad.Linq препроцессор?

ответ

3

Чтобы использовать эту функцию в LINQPad, запустите запрос и нажмите кнопку лямбда в окне результатов. Обратите внимание, что это работает только для запросов на основе IQueryable. Это означает, что для локальных запросов, необходимо вызвать .AsQueryable():

from n in new[] { "Tom", "Dick", "Harry" }.AsQueryable() 
where n.Contains ("a") 
select n 

Перевода из выражений запроса в беглый синтаксис особенно интересен с запросами, которые имеют несколько генераторов, присоединяется или оператор пусть. Например:

var fullNames = new[] { "Anne Williams", "John Fred Smith", "Sue Green" }.AsQueryable(); 

IEnumerable<string> query = 
    from fullName in fullNames 
    from name in fullName.Split() 
    orderby fullName, name 
    select name + " came from " + fullName; 

query.Dump(); 

Это приводит к:

System.String[] 
    .SelectMany (
     fullName => fullName.Split (new Char[0]), 
     (fullName, name) => 
     new 
     { 
      fullName = fullName, 
      name = name 
     } 
    ) 
    .OrderBy (temp0 => temp0.fullName) 
    .ThenBy (temp0 => temp0.name) 
    .Select (temp0 => ((temp0.name + " came from ") + temp0.fullName)) 
1

Resharper может преобразовывать выражения LINQ в цепи методов.

1

Вы также можете попробовать выполнить выражения Linq через Reflector (В частности, см. Жалобу 2).

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