C# 当一个查询抛出System.NotSupportedException时,这两个查询之间有什么区别
我遇到了一个异常,在该网站上搜索得很好: System.NotSupportedExceptionLocal序列不能用于查询运算符的LINQ到SQL实现中,Contains运算符除外 我发现这个答案很有帮助。然而,这个问题似乎与答案相矛盾,对我来说很好:C# 当一个查询抛出System.NotSupportedException时,这两个查询之间有什么区别,c#,linq-to-sql,C#,Linq To Sql,我遇到了一个异常,在该网站上搜索得很好: System.NotSupportedExceptionLocal序列不能用于查询运算符的LINQ到SQL实现中,Contains运算符除外 我发现这个答案很有帮助。然而,这个问题似乎与答案相矛盾,对我来说很好: return clients.Where(client => client.CompanyID.HasValue && client.Company.CompanyAssociations.Any(as
return clients.Where(client =>
client.CompanyID.HasValue &&
client.Company.CompanyAssociations.Any(ass =>
localListOfSearchStrings.Any(str => ass.Contact.FullName.Contains(str))));
而这个在我看来完全相同的查询抛出了一个异常:
return stores.Where(store =>
store.Asset.AssetOwners.Any(assetOwner =>
assetOwner.Client.CompanyID.HasValue &&
assetOwner.Client.Company.CompanyAssociations.Any(ass =>
localListOfSearchStrings.Any(str =>
ass.Contact.FullName.Contains(str)))));
我不想将记录列表拉入本地内存进行评估
另一个复杂问题是locallistofsearchString
可能包含名字或姓氏
所以我真的需要评估
localListOfSearchStrings.Any(str =>
CompanyAssociation.Contact.FullName.Contains(str))
而不是,例如
listOfLocalSearchStrings.Contains(CompanyAssociation.Contact.FullName)
当然,答案很傻 答案是正确的。查询工作的原因是,在调用查询之前,
客户机
实际上已被强制转换到列表中-SQL Server Profiler提醒我这一事实。这太糟糕了
正如格特·阿诺德(Gert Arnold)在上面指出的那样,这个问题的解决方案是使用PredicateBuilder(也在引用的问题中提出)。当然,答案是愚蠢的 答案是正确的。查询工作的原因是,在调用查询之前,
客户机
实际上已被强制转换到列表中-SQL Server Profiler提醒我这一事实。这太糟糕了
正如格特·阿诺德(Gert Arnold)在上文中指出的那样,该问题的解决方案是使用PredicateBuilder(也在引用的问题中建议)。看到异常消息,第一个查询运行良好令人惊讶。看起来您需要一个解决方案来构建“或”查询,例如使用PredicateBuilder。或者移动到实体框架:)看到异常消息,第一个查询运行正常令人惊讶。看起来您需要一个解决方案来构建“或”查询,例如使用PredicateBuilder。或移动到实体框架:)