Expression
コードを表すコードです。を呼び出すまで実行できる実行可能なコードではありませんCompile()
。
にExpression
は、いくつかのコードを説明するオブジェクトグラフが含まれています。したがって、関数の例は次のとおりです。
x => x + 1
1つのパラメーターを取り、式(x + 1)を返す関数を表します。オブジェクトグラフとしては、次のようになります。
Expression
AdditionExpression
RightValue
VariableExpression (x)
LeftValue
LiteralExpression (1)
式を解析して、式の一部の名前、リテラル値、または演算を把握できます。コンパイルされると、それは論理的な一連の操作であり、そのメタデータはすべて失われます。
Entity Frameworkに関しては、次のようなサンプル式が与えられます。
myObjects.Where(x => x.Id > 10).ToList()
LINQ to SQLIQueryable
プロバイダーは、この式を検査し、プロパティの名前をId
見つけてから、リテラル値10を見つけてそれをSQLステートメントに変換します。これが関数(コンパイルされたコード単位)である場合、検査するメタデータがなく、SQLへの変換は不可能です。また、SQLクエリが大きなデータセットではなく、要求されたデータのみを返すようにするために、サポートされている式とサポートされていない式に分解することもできます。