2

http://geekswithblogs.net/Martinez/archive/2009/06/29/understanding-expression-trees.aspx

式ツリーとは何か、そしてそれらが何に使用されるかを説明するこの記事を読むことによって、私はそれらが私に明確に答えていない記事であるといういくつかの質問があります。

A.データ構造と「コンパイルされたコード」の違いは何ですか。*データ構造がArray、List、..であることは知っていますが、これは私が探している答えではありません。

B.効率の観点から、「コンパイルされたコード」よりもEntityFrameworkでデータ構造を使用する方がよいのはなぜですか。

4

2 に答える 2

3

AとBの両方に答えてください。

コンパイルされたコードは、SQLに変換できるものにリバースエンジニアリングすることはできません。SQLに変換したい元の概念をなくした多くの詳細があります。式ツリーは、コンパイルされたコードでは実行できない実行時に分析および理解できます。

クエリの別のメタ表現を使用することもできますが、式ツリーには、コンパイラの既存の配管を多くの重い作業に使用できるという利点があります。

于 2012-10-23T18:15:23.207 に答える
1

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クエリが大きなデータセットではなく、要求されたデータのみを返すようにするために、サポートされている式とサポートされていない式に分解することもできます。

于 2012-10-23T18:18:45.767 に答える