2013-03-13 2 views
23

Co oznacza słowo kluczowe "wartość" w tym oświadczeniu i dokąd chciałbym się dowiedzieć więcej?
Co się stanie, jeśli pominiemy słowo kluczowe "wartość"? W poniższym kodzie z jest klasą szkieletową encji."WYBIERZ WARTOŚĆ" - słowo kluczowe wartości w LINQ/Entity Framework zapytanie

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(); 

(Jest to część pytania praktycznego do egzaminu).

Powyższy kod znajduje się w funkcji, która zwraca zmienną typu z.

Odpowiedz

30

To jest składnia Entity SQL. Value słowo kluczowe umożliwia podanie tylko jednej wartości i nie dodaje zawijania wierszy.

Czytaj article about SELECT statement in ESQL

Entity SQL obsługuje dwa warianty klauzuli SELECT. Pierwszy wariant, wiersz wyboru, jest identyfikowany przez słowo kluczowe SELECT i może być używany do określenia jednej lub więcej wartości, które powinny być wyświetlane. Ponieważ niejawnie dodane jest opakowanie wiersza wokół zwróconych wartości, wynikiem wyrażenia zapytania jest zawsze multiset wierszy.

Każde wyrażenie zapytania w wierszu select musi określać alias. Jeśli nie podano aliasu , jednostka podrzędna SQL podejmie próbę wygenerowania aliasu za pomocą reguł generowania aliasu za pomocą .

Drugi wariant klauzuli SELECT, wybór wartości, jest oznaczany jako słowem kluczowym SELECT VALUE. Pozwala na podanie tylko jednej wartości, i nie dodaje owijki wiersza.

Tak więc, jeśli chcesz zmaterializować z obiektu z zapytania, należy użyć SELECT VALUE składni (inaczej dostaniesz wyjątek: odlew z MaterializedDataRecord rodzaju oo nie jest ważna).

Bez VALUE hasła dostaniesz zestaw wierszy:

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();