Ответ 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();