我想使用动作过滤器将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。它解决了这个问题。