【发布时间】:2011-10-23 09:21:06
【问题描述】:
我通过使用 LINQPad 查询现有的 OData 源来了解 OData。使用 Netflix 提要,我试图获得获奖最多的演员名单,但我遇到了奇怪的例外情况。我的第一次尝试是:
People.OrderByDescending(p => p.Awards.Count).Take(10)
但这给了我一个5DataServiceQueryException,内部例外是:
类型“System.Collections.Generic.ICollection”1[[Netflix.Catalog.v2.Entities.TitleAward, Netflix.Catalog.v2, Version=1.0.0.0, Culture=neutral, PublicKeyToken 中不存在属性“Count” =null]]' 在第 7 位。
我尝试通过使用.Count() 扩展方法而不是.Count 属性来稍微改变一下:
People.OrderByDescending(p => p.Awards.Count()).Take(10)
但这只是给我一个 InvalidCastException:
无法将“System.Linq.Expressions.PropertyExpression”类型的对象转换为“System.Data.Services.Client.ResourceExpression”类型。
在 System.Data.Services.Client.ResourceBinder.AnalyzeCountMethod(MethodCallExpression mce)
在 System.Data.Services.Client.ResourceBinder.VisitMethodCall(MethodCallExpression mce)
在 System.Data.Services.Client.ALinqExpressionVisitor.Visit(Expression exp)
在 System.Data.Services.Client.DataServiceALinqExpressionVisitor.Visit(Expression exp)
在 System.Data.Services.Client.ALinqExpressionVisitor.VisitLambda(LambdaExpression lambda)
在 System.Data.Services.Client.ALinqExpressionVisitor.Visit(Expression exp)
在 System.Data.Services.Client.DataServiceALinqExpressionVisitor.Visit(Expression exp)
在 System.Data.Services.Client.ALinqExpressionVisitor.VisitUnary(UnaryExpression u)
在 System.Data.Services.Client.ALinqExpressionVisitor.Visit(Expression exp)
在 System.Data.Services.Client.DataServiceALinqExpressionVisitor.Visit(Expression 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 m)
在 System.Data.Services.Client.ResourceBinder.VisitMethodCall(MethodCallExpression mce)
在 System.Data.Services.Client.ALinqExpressionVisitor.Visit(Expression exp)
在 System.Data.Services.Client.DataServiceALinqExpressionVisitor.Visit(Expression exp)
在 System.Data.Services.Client.ResourceBinder.Bind(Expression e)
在 System.Data.Services.Client.DataServiceQueryProvider.Translate(Expression e)
在 System.Data.Services.Client.DataServiceQuery1.Execute()1.GetEnumerator()
at System.Data.Services.Client.DataServiceQuery
在 System.Data.Services.Client.DataServiceQuery`1.System.Collections.IEnumerable.GetEnumerator()
我尝试遵循this question 的建议,但我得到的只是上述两个错误之一。
任何想法如何执行这个简单的操作?
【问题讨论】:
标签: c# .net wcf-data-services odata netflix