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(ReadOnlyCollection1 original)
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
在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.DataServiceQuery1.Execute()
. getenumerator ()
at System.Data.Services.Client.DataServiceQuery
1.System.Collections.IEnumerable.GetEnumerator()
我试着按照建议做这个问题,但我得到的只是上面两个错误中的一个。
知道如何执行这个简单的操作吗?
您希望基于聚合操作(count)做出决策(在本例中为"order")。
在OData查询中不支持这种聚合操作(目前?)。
查看这个问题了解更多信息:WCF数据服务中的集合存在标准
最后,您必须以不同的方式处理过滤/排序数据。至少两种可能的解决方案:
- 将更多数据拉到客户端,并在那里进行过滤。
- 如果你控制服务器,那么你可以公开一个专门的服务操作返回结果(显然不是在Netflix是你的数据来源)