我的应用程序基于实体框架。我通过将查询保存在另一个表中来提供用户查询特定表。例如,数据库中的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'"
在这种情况下我该怎么做?
此致
答案 0 :(得分:0)
尝试仅选择列的子集后,您将永远不会获得ObjectQuery<TableData>
。只有当您选择整个实体作为第一个查询时,才使用ObjectQuery<TableData>
- 这是由实体框架强制执行的强类型方法。
ESQL不支持Linq-to-entities的投影方式(通过允许您投影到新的匿名或非映射类型)。使用投影with ESQL you must work with ObjectQuery<DbDataRecord>
时。