2012-02-24 31 views
1

我想使用動作過濾器將Odata uri轉換爲Linq表達式。我這樣做是因爲我使用結果表達式來查詢nonSQL業務系統行。在WCF的Web API,這是微不足道的,因爲翻譯的查詢被追加爲請求對象的屬性,因爲這樣的:將odata uri轉換爲表達式

var query = (EnumerableQuery)request.Properties["queryToCompose"]; 

這似乎已經消失。有沒有公​​共API可以用來完成這個?

回答

1

因此,事實證明,查詢已改變請求屬性集合中的鍵。似乎分析查詢的內部過濾器在自定義過濾器之後運行,因此不會添加查詢值。要獲得翻譯後的查詢,請在控制器操作中調用以下內容。

(EnumerableQuery<T>)this.Request.Properties["MS_QueryKey"]; 
1

我一直想類似的東西。雖然不完美,你可以直接從查詢字符串搶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或者你用於過濾的任何東西。幾乎沒有用處,但它是一個開始。

0

結賬Linq2Rest。它解決了這個問題。