嵌套列表上的 Linq OData "Where"子句

标签 linq wcf-data-services odata where

假设我有以下查询 OData Linq 查询(针对 http://odata.netflix.com/v2/Catalog 运行):

Genres.Where(x=>x.Name=="Adventures")
      .Select(y=> new
                  {
                    Genre = y.Name, 
                    Movie = y.Titles.Select(l=> new 
                                                {
                                                   l.Name, 
                                                   l.AverageRating
                                                 })
                    })

如何更改此查询以提供 AverageRating 为 3 的行?

(注意:这个问题的重点是找出如何对我的主级别查询项的扩展子列表的属性执行 where 子句。我的真正查询甚至不是针对 Netflix OData 提要。)

最佳答案

简短的回答是目前不可能。
$filter 始终(并且仅)适用于顶级实体集。当前无法过滤扩展的实体集。
$filter 可以到达扩展的实体集内部,但结果将始终过滤顶级集。在 V2 中,它适用于单例导航属性($filter 中的表达式可以遍历这些属性),在 V3 中,您可以使用 any/all 来合并集合导航属性。

这不起作用的原因是 OData 协议(protocol)没有定义嵌套过滤器的 URI 语法。事实上,除了扩展本身和投影之外,它几乎没有在扩展实体集上定义任何运算符。

关于嵌套列表上的 Linq OData "Where"子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7650369/

相关文章:

c# - 在 Linq 投影中使用方法

javascript - OData:Wildcard(startswith)过滤url请求中的number(ID)字段

asp.net-web-api - 最大扩展深度,带有最新的Web API和 Breeze

javascript - 在 Dynamics 365 XRM Web API 中创建记录时无法设置多选选项字段

c# - Skip and Take 在 Entity Framework 中生成异常

c# - 在不同类型上映射/转换 Linq-to-Sql 的问题

c# - LINQ to SQL,从继承类中选择

c# - 操作而不是查询拦截器(WCF 数据服务)

visual-studio-2008 - 为什么我的 WCF 数据服务客户端代理代码中缺少我的 ServiceOperation 方法?

c# - 如何转义要在 OData 查询中使用的单引号?