WCF数据服务V5中的任何/所有支持问题

时间:2012-06-05 07:12:59

标签: wcf-data-services odata

我开始使用它,但Any和All在Linq To SQl上没有使用ReflectionProvider。并且失败并出现以下错误。关于如何解决这个问题的任何指示。

Unhandled Exception: System.Data.Services.Client.DataServiceQueryException: An error occurred while processing this request. —> System.Data.Services
 .Client.DataServiceClientException: **An error occurred while processing this request.Argument type
 s do not matchSystem.ArgumentException at System.Linq.Expressions.Expression.Condition(Expression test**, Expressio
 n ifTrue, Expression ifFalse) 

1 个答案:

答案 0 :(得分:0)

我在使用带有NHibernate的WCF Data Services V5时遇到了同样的问题(使用Re-linq作为QueryProvider)。我发现生成不同的表达式取决于我是直接针对NHibernate会话还是针对数据服务客户端运行以下LINQ查询:

.Where(x => x.Staff.Any(y => y.FirstName == "Bill"))

如果我在会话中查询它,它会生成以下表达式:

{value(NHibernate.Linq.NhQueryable`1[WcfDataServicesTest.Entities.Store]).Where(x => x.Staff.Any(y =    > (y.FirstName == "Bill")))}

但是当我查询客户端时,我得到以下内容:

{value(NHibernate.Linq.NhQueryable`1[WcfDataServicesTest.Entities.Store]).Where(it => IIF((it.Staff == null), Empty(), it.Staff).Any(p => (p.FirstName == "Bill")))}

注意额外的条件表达式(IIF ...)?

我还不知道原因,但我找到了一个不错的解决方法,直到我这样做:

http://abilityforge.com/?p=18

编辑: 以下是对问题的详细解释(以及更好的解决方案):http://blog.davidebbo.com/2011/08/how-odata-quirk-killed-nuget-server.html