假设我有以下查询 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/