Linq 林克奥达塔“;其中;嵌套列表上的子句

Linq 林克奥达塔“;其中;嵌套列表上的子句,linq,wcf-data-services,odata,where,Linq,Wcf Data Services,Odata,Where,假设我有以下查询OData Linq查询(针对其运行): 如何更改此查询以给出平均值为3的行 (注意:这个问题的重点是找出如何对我的主要级别查询项的扩展子列表的属性执行where子句。我真正的查询甚至不是针对Netflix OData提要。)简短的回答是,目前不可能。 $filter始终(且仅)应用于顶级实体集。目前无法筛选扩展的实体集。 $filter可以到达扩展的实体集内部,但结果将始终过滤顶级集。在V2中,它适用于单例导航属性($filter中的表达式可以遍历这些属性),在V3中,您可以使

假设我有以下查询OData Linq查询(针对其运行):

如何更改此查询以给出平均值为3的行


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

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


这无法工作的原因是OData协议没有为嵌套筛选器定义URI语法。事实上,除了扩展本身和投影之外,它几乎没有在扩展的实体集上定义任何操作符。

Genres.Where(x=>x.Name==“Adventures”&&x.Titles.any(t=>t.AverageRating==3))
?@BalaR-
any
在当前版本的WCF数据服务中不受支持。(但在下一个版本中)。那么你是说V3中的扩展实体集将支持$filter吗?不,我说的是将支持any/all,它允许你根据扩展集的内容过滤顶级集。但它仍然不允许您过滤扩展集。好的,谢谢。我真正需要的是您所描述的内容(根据扩展集的内容过滤顶级项)。谢谢ODataV3的发行版是否连接到VisualStudio11?(这是你可以谈论的吗?)我还不能谈论确切的日期(对不起)。我们有一个支持any/all()的CTP。你可以试试这个。
Genres.Where(x=>x.Name=="Adventures")
      .Select(y=> new
                  {
                    Genre = y.Name, 
                    Movie = y.Titles.Select(l=> new 
                                                {
                                                   l.Name, 
                                                   l.AverageRating
                                                 })
                    })