关键字"值"在这个陈述中意味着什么,我将在哪里学习更多? 如果我省略关键字"值"会发生什么?在下面的代码中,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类型变量的函数中。
答案 0 :(得分:30)
这是Entity SQL语法。 Value
关键字只允许指定一个值,并且不添加行包装。
阅读article about SELECT statement in ESQL
实体SQL支持SELECT子句的两种变体。首先 变量,行选择,由SELECT关键字标识,并且可以 用于指定应该投出的一个或多个值。 因为在返回的值周围隐式添加了行包装器, 查询表达式的结果始终是多行的行。
行select中的每个查询表达式都必须指定别名。如果不 指定了别名,Entity SQL尝试使用生成别名 别名生成规则。
SELECT子句的另一个变量value select由。标识 SELECT VALUE关键字。它只允许指定一个值, 并且不添加行包装器。
因此,如果您想从查询中实现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();