2012-07-02 30 views
0

我的應用程序基於實體框架。我提供用戶通過將查詢保存在另一個表中來查詢特定表。例如,數據庫中的TopQuery表存儲所有在用戶中流行的查詢。 這些查詢是在表「TableData」上執行的使用實體SQL查詢概念模型

對於測試目的,我嘗試了以下方法,它的工作原理。唯一的問題是,它返回所有列,因爲我想使用用戶在其查詢中提到的列。

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」 to'TestEntities.TableData'type指定的強制轉換無效。

我也嘗試過,沒有任何運氣。

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

在這種情況下該怎麼辦?

問候,

回答

0

你將永遠不會得到ObjectQuery<TableData>一旦你嘗試選擇列的唯一子集。使用ObjectQuery<TableData>僅在您選擇整個實體作爲第一個查詢時才起作用 - 這是由Entity框架強制實施的強類型方法。

ESQL不支持Linq-to-entities(通過允許您投影到新的匿名或非映射類型)的方式進行投影。當使用投影with ESQL you must work with ObjectQuery<DbDataRecord>