Подтвердить что ты не робот

"SELECT VALUE" - ключевое слово value в запросе LINQ/Entity Framework

Что означает ключевое слово "значение" в этом утверждении, и куда я пойду, чтобы узнать больше?
Что произойдет, если я оставлю ключевое слово "значение"? В приведенном ниже коде 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.

4b9b3361

Ответ 1

Это Синтаксис Entity SQL. Ключевое слово Value позволяет указать только одно значение и не добавлять оболочку строки.

Прочитайте статью о инструкции SELECT в ESQL

Entity SQL поддерживает два варианта предложения SELECT. Первый вариант, выбор строки, определяется ключевым словом SELECT и может быть используется для указания одного или нескольких значений, которые должны быть проецированы. Поскольку обертка строк неявно добавляется вокруг возвращаемых значений, результат выражения запроса всегда представляет собой многомножество строк.

Каждое выражение запроса в строке select должно указывать псевдоним. Если нет псевдоним указан, Entity SQL пытается сгенерировать псевдоним, используя правила генерации псевдонимов.

Другой вариант предложения SELECT, выбор значения, определяется ключевое слово SELECT VALUE. Он позволяет указать только одно значение, и не добавляет обертку строк.

Итак, если вы хотите материализовать объект z из своего запроса, вы должны использовать синтаксис SELECT VALUE (иначе вы получите исключение: cast from MaterializedDataRecord to z type недопустим).

Без ключевого слова 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();