27

此语句中的关键字“价值”是什么意思,我该去哪里了解更多信息?
如果我省略关键字“价值”会发生什么?在下面的代码中,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 类型变量的函数中。

4

1 回答 1

35

那是实体 SQL语法。Value关键字只允许指定一个值,并且不添加行包装器。

阅读有关 ESQL 中的 SELECT 语句的文章

Entity SQL 支持 SELECT 子句的两种变体。第一个变体,行选择,由 SELECT 关键字标识,可用于指定一个或多个应投影的值。由于在返回值周围隐式添加了行包装器,因此查询表达式的结果始终是多行集。

行选择中的每个查询表达式都必须指定一个别名。如果未指定别名,Entity SQL 将尝试使用别名生成规则生成别名。

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();
于 2013-03-13T13:35:04.727 回答