0

我的应用程序基于实体框架。我提供用户通过将查询保存在另一个表中来查询特定表。例如,数据库中的 TopQuery 表存储了所有受用户欢迎的查询。这些查询在表“TableData”上执行

出于测试目的,我尝试了以下方法并且它有效。唯一的问题是它返回所有列,因为我想使用用户在查询中提到的列。

string queryString =
        @"SELECT VALUE table FROM TestEntities.TableData AS table where table.col1 = 'test'";

    ObjectQuery<TableData> productQuery2 =
        new ObjectQuery<TableData>(queryString, context);

我的问题是,如果用户像这样在数据库中存储查询,它就不起作用。

SELECT table.col1, table.col2, table.col3 FROM TestEntities.TableData AS table where table.col1 = "test"

我得到了异常:从物化 System.Data.Objects.MaterializedDataRecord' 到'TestEntities.TableData' 类型的指定转换无效。

我也试过这个没有任何运气。

"SELECT it.col1, it.col2 FROM TableData WHERE it.col1 = 'test'"

在这种情况下我该怎么办?

问候,

4

1 回答 1

0

ObjectQuery<TableData>一旦您尝试仅选择列的子集,您将永远不会得到。ObjectQuery<TableData>仅当您像第一个查询那样选择整个实体时,使用才有效 - 这是 Entity 框架强制执行的强类型方法。

ESQL 不像 Linq-to-entities 那样支持投影(通过允许您投影到新的匿名或非映射类型)。将投影与 ESQL 一起使用时,您必须使用ObjectQuery<DbDataRecord>.

于 2012-07-02T12:06:10.650 回答