2013-03-13 10 views
23

このステートメントのキーワード "value"は何を意味していますか?
キーワード「値」を省略した場合はどうなりますか?以下のコードでは、zはエンティティフレームワーククラスです。LINQ/Entity Frameworkクエリの "SELECT VALUE" - valueキーワード

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型の変数を返す関数です。

答えて

30

つまり、Entity SQLという構文です。 Valueキーワードは1つの値のみを指定でき、行ラッパーは追加しません。

読むarticle about SELECT statement in ESQL

エンティティSQLはSELECT句の二つの変種をサポートしています。先頭の の行選択は、SELECTキーワードで識別され、投影する必要がある1つ以上の値を指定するために使用される になります。 返される値の周囲に行ラッパーが暗黙的に追加されるため、照会式の結果は常に複数行の行になります。

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

SELECT句の別のバリエーションであるselectは、 SELECT VALUEキーワードで識別されます。 1つの値( )のみを指定でき、行ラッパーは追加しません。あなたのクエリからzオブジェクトを実体化する場合

そう、あなたがSELECT VALUE構文を使用する必要があります(そうしないと例外が発生します:Z型にMaterializedDataRecordからキャストが有効ではありません)。 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(); 
関連する問題