2012-02-24 34 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。它解决了这个问题。