2010-12-01 2 views
3

次のクエリを機能呼び出しに変換するにはどうすればよいですか?私は、コンパイラは舞台裏でこれを行います知っているが、私はこの場合LINQの列挙型拡張メソッドにクエリの解説を変換する

 var query = from item in Enumerable.Range(0, 10) 
        from item2 in Enumerable.Range(item, 10) 
        from item3 in Enumerable.Range(item2, 10) 
        select new { item, item2, item3 }; 
+0

"この特定のクエリをメソッドチェーンに変換するのは何ですか?"、または "LINQクエリのメソッドチェーンバージョンを表示するにはどうすればよいですか"というより一般的な質問をしていますか? ? – AakashM

+0

主に前者について尋ねますが、後者にも関心があります – cordialgerm

+0

後者については、それは本当の答えではありませんが、私はReSharperがIDEであなたのために変換を行うことを提案します – AakashM

答えて

6

結果を表示する方法を知らない、それはSelectManyを使用し、コンセプトは、既存の範囲変数を保持する透明識別子と呼ばれます。この場合、zが透明の識別子である(

var query = Enumerable.Range(0, 10) 
         .SelectMany(item => Enumerable.Range(item, 10), 
            (item, item2) => new { item, item2 }) 
         .SelectMany(z => Enumerable.Range(z.item2, 10), 
            (z, item3) => new { z.item, z.item2, item3 }); 

where句または最後from句の後select以外の何かがあったと思います場合は、他の透明識別子がされているだろう。だからあなたのクエリがに変換します。導入されました。

翻訳はすべてC#言語仕様、セクション7.16で説明されています。