2009-04-29 20 views
9

LINQの「クエリ」構文式の結果であるラムダ式を取得する方法があるかどうかを知る。LINQクエリのラムダへの構文

は考える:

var query = from c in dc.Colors 
      where c.ID == 213 
      orderby c.Name, c.Description 
      select new {c.ID, c.Name, c.Description }; 

は、生成された "ラムダ" コード/表現を取得する方法はありますか?

var query = dc.Colors 
    .Where(c => c.ID == 213) 
    .OrderBy(c => c.Name) 
    .ThenBy(c => c.Description) 
    .Select(c => new {c.ID, c.Name, c.Description, }); 

これは非常に単純な例であり、コードをコンパイルするときにC#コンパイラがクエリ式からラムダ式を生成することがわかりました。その表現のコピーを得る方法はありますか?

ラムダ式に慣れていない私のチームメンバーのために、これをトレーニングツールとして使用したいと考えています。また、私はLinqパッドを使用しましたが、理想的には、これはサードパーティのツールなしで達成することができます。

答えて

5

単純に行く:LINQPadに比べ

string lambdaSyntax = query.Expression.ToString(); 

欠点は結果がすべて1行にフォーマットされていることです。

+0

これは、Reflectorをアセンブリで使用した場合と同様の結果を示します。クレイジーな名前の匿名型に対するすべての静的メソッド呼び出し。理想的ではない。 – andleer

+0

Reflectorで見るよりも優れています。サードパーティのツールを使用しなくても得意です。 –

+0

あなたの本が大好きです。私はチームメンバーのためにいくつかのコピーを買った。 – andleer

3

アセンブリをコンパイルしてから、リフレクタを使用して見てみることができます。

これは、コンパイラが直接メソッド呼び出し(すべてが静的メソッド呼び出しで、拡張メソッドではなく、ラムダが独自にコンパイルされるため)をコンパイルするため、少し複雑です。通常<ClassName>b_88fのようなものと呼ばれる関数)

あなたは確かに:-)

+0

反射鏡は素晴らしいツールです!ボーナスポイントは、それを使って.netのアセンブリについての.netコードを見ることができるからです。 –

2

ReSharperは、その機能を持っていても何が起こっているかを把握します。それはラムダにLINQを取り、キーのストロークで再び戻ってくるでしょう。他にも非常に(非常に)便利です。

+0

本当にサードパーティのツールを避けようとしています。 – andleer