【问题标题】:Translate odata uri to expression将 odata uri 转换为表达式
【发布时间】:2012-03-14 12:38:15
【问题描述】:

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

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

这似乎消失了。我可以使用任何公共 api 来完成此操作吗?

【问题讨论】:

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


    【解决方案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 或您用于过滤的任何内容。几乎没有那么有用,但它是一个开始。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        查看Linq2Rest。它解决了这个问题。

        【讨论】:

          猜你喜欢
          • 2011-08-04
          • 1970-01-01
          • 1970-01-01
          • 2012-01-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多