将odata uri翻译成表达

时间:2012-02-24 02:04:58

标签: linq wcf-data-services odata asp.net-web-api

我想使用动作过滤器将Odata uri转换为Linq表达式。我这样做是因为我使用结果表达式来查询非SQL业务系统。在WCF web api中,这是微不足道的,因为已翻译的查询作为请求对象的属性附加,如下所示:

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

这似乎已经消失了。我可以用任何公共api来实现这个目标吗?

3 个答案:

答案 0 :(得分: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或您用于过滤的任何内容。不是那么有用,但它是一个开始。

答案 1 :(得分:1)

事实证明,查询已更改了请求属性集合中的键。似乎解析查询的内部过滤器在自定义过滤器之后运行,因此不会添加查询值。要获取已翻译的查询,请在控制器操作中调用以下内容。

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

答案 2 :(得分:0)

结帐Linq2Rest。它解决了这个问题。