使用实体SQL查询概念模型

时间:2012-07-02 10:58:11

标签: c# entity-framework entity-sql

我的应用程序基于实体框架。我通过将查询保存在另一个表中来提供用户查询特定表。例如,数据库中的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'"

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

此致

1 个答案:

答案 0 :(得分:0)

尝试仅选择列的子集后,您将永远不会获得ObjectQuery<TableData>。只有当您选择整个实体作为第一个查询时,才使用ObjectQuery<TableData> - 这是由实体框架强制执行的强类型方法。

ESQL不支持Linq-to-entities的投影方式(通过允许您投影到新的匿名或非映射类型)。使用投影with ESQL you must work with ObjectQuery<DbDataRecord>时。