我开始使用它,但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)
答案 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://blog.davidebbo.com/2011/08/how-odata-quirk-killed-nuget-server.html