2015-02-06 88 views
2

我在ODataController中,我有一個ODataQueryOptions(以及其餘所有內容)。將OData查詢翻譯成SQL

我知道數據的來源是SQL Server中的表。

但是,我的EF模型(被WEB API框架用來將HTTP請求路由到我的控制器)是無類型的,即我沒有POCO類。

通常情況下 - 如果我確實有POCO類 - 框架會奇蹟般地從OData查詢中寫入SQL,以便在數據庫上完成分頁,過濾和排序,而不是在Web服務器上的內存中完成。您可以在DbContext上使用Database.Log來查看由涉及POCO類的LINQ語句生成的SQL。

我該怎麼做到這一點?我有EF模型,我有OData請求,但是如何將它們組合起來以查詢SQL Server?

+0

我通過在https://github.com/cuongle/DynamicOdata將OData查詢轉換爲SQL來編寫了一個動態ODATA。 – 2015-12-14 22:47:22

回答

0

我寫了一個package將OData查詢轉換成IQueryable對象,可用於直接查詢底層數據庫。您仍然需要提供關於表的元數據,但是它可以在運行時傳遞,而不需要POCO。

就生成SQL而言,返回的IQueryable對象是EntityFramework ObjectQuery對象,因此您只需調用ToString()即可顯示SQL,但目前無法檢索參數和關聯值,因此您只是最好使用生成的IQueryable直接查詢數據庫。