我想使用動作過濾器將Odata uri轉換爲Linq表達式。我這樣做是因爲我使用結果表達式來查詢nonSQL業務系統行。在WCF的Web API,這是微不足道的,因爲翻譯的查詢被追加爲請求對象的屬性,因爲這樣的:將odata uri轉換爲表達式
var query = (EnumerableQuery)request.Properties["queryToCompose"];
這似乎已經消失。有沒有公共API可以用來完成這個?
我想使用動作過濾器將Odata uri轉換爲Linq表達式。我這樣做是因爲我使用結果表達式來查詢nonSQL業務系統行。在WCF的Web API,這是微不足道的,因爲翻譯的查詢被追加爲請求對象的屬性,因爲這樣的:將odata uri轉換爲表達式
var query = (EnumerableQuery)request.Properties["queryToCompose"];
這似乎已經消失。有沒有公共API可以用來完成這個?
因此,事實證明,查詢已改變請求屬性集合中的鍵。似乎分析查詢的內部過濾器在自定義過濾器之後運行,因此不會添加查詢值。要獲得翻譯後的查詢,請在控制器操作中調用以下內容。
(EnumerableQuery<T>)this.Request.Properties["MS_QueryKey"];
我一直想類似的東西。雖然不完美,你可以直接從查詢字符串搶OData的表情和手工打造的LINQ表達式:
var queryParams = HttpUtility.ParseQueryString(ControllerContext.Request.RequestUri.Query);
var top = queryParams.Get("$top");
var skip = queryParams.Get("$skip");
var orderby = queryParams.Get("$orderby");
而直接應用,爲您的IQueryable
或者你用於過濾的任何東西。幾乎沒有用處,但它是一個開始。
結賬Linq2Rest。它解決了這個問題。