メソッド構文とクエリ構文Deferred Execution
のクエリに使用できるかどうか知りたいのですが、違いがあるかどうか知りたいです。ありがとう
3 に答える
実際には、メソッド構文のみがあります。クエリ構文を使用してクエリを作成すると、コンパイラはそれをメソッド構文に変換します(実際には静的メソッド呼び出しに変換します)。
例:
拡張メソッド呼び出し(メソッド構文)
var query = sequence.Select(x => x.Property);
としてコンパイルされます(はい、拡張メソッドは静的クラスメソッドの呼び出しのための単なる構文糖衣です)
var query = Queryable.Select(sequence, x => x.Property);
同じ結果が得られます(これは、同じQueryable / Enumerableメソッド呼び出しのシンタックスシュガーです)
var query = from x in sequence
select x.Property;
したがって、両方の構文で同じコードが生成されます。したがって、使用している構文に違いはありません。遅延実行(およびその他)は同じように機能します。
クエリ構文はメソッド構文の単なる構文糖衣であるため、違いはありません。
遅延実行はどちらも同じです。クエリ構文は、実際にはコンパイル時にメソッド構文にコンパイルされます。
LINQ 入門ドキュメントのほとんどのクエリは、C# 3.0 で導入された宣言型クエリ構文を使用して、クエリ式として記述されています。ただし、.NET 共通言語ランタイム (CLR) 自体にはクエリ構文の概念がありません。したがって、コンパイル時に、クエリ式は、CLR が理解できるもの (メソッド呼び出し) に変換されます。これらのメソッドは標準クエリ演算子と呼ばれ、Where、Select、GroupBy、Join、Max、Average などの名前が付いています。クエリ構文の代わりにメソッド構文を使用して直接呼び出すことができます。