27

このステートメントでキーワード「値」は何を意味しますか、そしてどこでもっと学ぶことができますか?
キーワード「value」を省略した場合はどうなりますか?以下のコードでは、zはエンティティフレームワーククラスです。

string queryString = "SELECT VALUE q from x.zs as q where q.a = @parm;"
ObjectQuery<z> query = context.CreateQuery<z> 
    (queryString, new ObjectParameter("parmname",parmvalue)); 
return query.First(); 

(これは試験の練習問題の一部です)。

上記のコードは、タイプzの変数を返す関数内にあります。

4

1 に答える 1

35

それがEntity SQL構文です。Valueキーワードでは 1 つの値のみを指定でき、行ラッパーは追加されません。

ESQL の SELECT ステートメントに関する記事を読む

Entity SQL は、SELECT 句の 2 つのバリアントをサポートしています。最初のバリアントである行選択は、SELECT キーワードによって識別され、射影する必要がある 1 つ以上の値を指定するために使用できます。返される値の周りに行ラッパーが暗黙的に追加されるため、クエリ式の結果は常に行のマルチセットになります。

行選択の各クエリ式では、エイリアスを指定する必要があります。エイリアスが指定されていない場合、Entity SQL は、エイリアス生成規則を使用してエイリアスを生成しようとします。

SELECT 句のもう 1 つのバリアントである値の選択は、SELECT VALUE キーワードによって識別されます。指定できる値は 1 つだけで、行ラッパーは追加されません。

したがって、zクエリからオブジェクトを具体化する場合は、SELECT VALUE構文を使用する必要があります (そうしないと、例外が発生します: MaterializedDataRecord から z 型へのキャストは無効です)。

キーワードを指定しないVALUEと、一連の行が取得されます。

string esql = "SELECT q from x.zs as q where q.a = @parm;";
ObjectQuery<DbDataRecord> query = context
       .CreateQuery<DbDataRecord>(esql, new ObjectParameter("parm",parmvalue)); 
var result = query.First();
于 2013-03-13T13:35:04.727 に答える