0

C#のLINQ拡張メソッドで匿名型を作成することは可能ですか?

たとえば、LINQ query.ie

var CAquery = from temp in CAtemp
 join casect in CAdb.sectors
 on temp.sector_code equals casect.sector_code
 select new
 {       
     //anonymous types
     CUSIP = temp.equity_cusip,
     CompName = temp.company_name,
     Exchange = temp.primary_exchange       
 };

C# の LINQ 拡張メソッドで同じ動作がサポートされていますか?

4

3 に答える 3

3

「拡張メソッド構文を使用する場合」ということですか?なら絶対に。クエリは次とまったく同じです。

var CAquery = CAtemp.Join(CAdb.sectors,
                          temp => temp.sector_code,
                          casect => casect.sector_code,
                          (temp, casect) => new
                          {       
                              CUSIP = temp.equity_cusip,
                              CompName = temp.company_name,
                              Exchange = temp.primary_exchange       
                          });

C# 言語仕様では、セクション 7.16 にすべての翻訳が記載されています。この場合、句の後にjoin句が続くだけselectなので、プロジェクションはJoin呼び出し内で実行されることに注意してください。それ以外の場合 (たとえば、where句がある場合)、コンパイラは透過的な識別子を導入して、2 つの範囲変数 (tempおよびcasect) を使用可能に保ち、それらのペアを単一の値に保持する新しい匿名型を介して使用します。

すべてのクエリ式は、クエリ式以外のコードとして表現できます。クエリ式は、事実上、前処理の形式です。

于 2013-05-09T17:13:00.890 に答える
1

このようなものかもしれません...

var CAquery=CATemp.Join(.....)
                  .Select(temp=>new
                           {       
                           CUSIP = temp.equity_cusip,
                           CompName = temp.company_name,
                           Exchange = temp.primary_exchange       
                           });
于 2013-05-09T17:11:49.470 に答える
-1

あなたが示したLINQクエリ拡張メソッドです。Joinコンパイラによって拡張メソッドの呼び出しに変換されるだけです。匿名型は、拡張メソッド内に含まれる任意の型を作成できる場所ならどこでも作成できます。

于 2013-05-09T17:10:45.830 に答える