Netflix OData:使用'Count'导航属性的

本文关键字:导航 属性 Count OData Netflix 使用 | 更新日期: 2023-09-27 18:12:12

我通过使用LINQPad查询现有的OData提要来了解OData。使用Netflix的feed,我试图获得获得最多奖项的演员名单,但我得到了奇怪的例外。我的第一个尝试是:

People.OrderByDescending(p => p.Awards.Count).Take(10)

但这给了我一个内部异常的5DataServiceQueryException:

在类型'System.Collections.Generic.ICollection ' 1中不存在属性'Count'。TitleAward Netflix.Catalog。v2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' at position 7.

我试图改变一些事情,通过使用.Count()扩展方法而不是.Count属性:

People.OrderByDescending(p => p.Awards.Count()).Take(10)

但是这只是给我一个InvalidCastException:

无法强制转换'System.Linq.Expressions '类型的对象。

在System.Data.Services.Client.ResourceBinder

。AnalyzeCountMethod (MethodCallExpression mce)
在System.Data.Services.Client.ResourceBinder。VisitMethodCall (MethodCallExpression mce)
在System.Data.Services.Client.ALinqExpressionVisitor。访问(表达式exp)
在System.Data.Services.Client.DataServiceALinqExpressionVisitor。访问(表达式exp)
在System.Data.Services.Client.ALinqExpressionVisitor。VisitLambda (LambdaExpressionλ)
在System.Data.Services.Client.ALinqExpressionVisitor。访问(表达式exp)
在System.Data.Services.Client.DataServiceALinqExpressionVisitor。访问(表达式exp)
在System.Data.Services.Client.ALinqExpressionVisitor。VisitUnary (UnaryExpression u)
在System.Data.Services.Client.ALinqExpressionVisitor。访问(表达式exp)
在System.Data.Services.Client.DataServiceALinqExpressionVisitor。访问(表达式exp)
在System.Data.Services.Client.ALinqExpressionVisitor。VisitExpressionList(ReadOnlyCollection 1 original)
at System.Data.Services.Client.ALinqExpressionVisitor.VisitMethodCall(MethodCallExpression m)
at System.Data.Services.Client.ResourceBinder.VisitMethodCall(MethodCallExpression mce)
at System.Data.Services.Client.ALinqExpressionVisitor.Visit(Expression exp)
at System.Data.Services.Client.DataServiceALinqExpressionVisitor.Visit(Expression exp)
at System.Data.Services.Client.ALinqExpressionVisitor.VisitExpressionList(ReadOnlyCollection
1 original)
在System.Data.Services.Client.ALinqExpressionVisitor。VisitMethodCall (MethodCallExpression米)
在System.Data.Services.Client.ResourceBinder。VisitMethodCall (MethodCallExpression mce)
在System.Data.Services.Client.ALinqExpressionVisitor。访问(表达式exp)
在System.Data.Services.Client.DataServiceALinqExpressionVisitor。访问(表达式exp)
在System.Data.Services.Client.ResourceBinder。绑定表达式(e)
在System.Data.Services.Client.DataServiceQueryProvider。翻译(表达e)
at System.Data.Services.Client.DataServiceQuery 1.Execute()
at System.Data.Services.Client.DataServiceQuery
. getenumerator ()
1.System.Collections.IEnumerable.GetEnumerator()

我试着按照建议做这个问题,但我得到的只是上面两个错误中的一个。

知道如何执行这个简单的操作吗?

Netflix OData:使用'Count'导航属性的

您希望基于聚合操作(count)做出决策(在本例中为"order")。
在OData查询中不支持这种聚合操作(目前?)。

查看这个问题了解更多信息:WCF数据服务中的集合存在标准

最后,您必须以不同的方式处理过滤/排序数据。至少两种可能的解决方案:

  1. 将更多数据拉到客户端,并在那里进行过滤。
  2. 如果你控制服务器,那么你可以公开一个专门的服务操作返回结果(显然不是在Netflix是你的数据来源)