このステートメントでキーワード「値」は何を意味しますか、どこでもっと知りたいですか?
キーワード「値」を省略するとどうなりますか?以下のコードでは、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の変数を返す関数内にあります。
それは Entity SQL 構文です。 Value
キーワードでは、1つの値のみを指定でき、行ラッパーは追加されません。
エンティティ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();