Linq OData“Where”子句在嵌套列表中

时间:2011-10-04 15:33:00

标签: 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源。)

1 个答案:

答案 0 :(得分:1)

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

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