C# 当一个查询抛出System.NotSupportedException时,这两个查询之间有什么区别

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

我遇到了一个异常,在该网站上搜索得很好:

System.NotSupportedExceptionLocal序列不能用于查询运算符的LINQ到SQL实现中,Contains运算符除外

我发现这个答案很有帮助。然而,这个问题似乎与答案相矛盾,对我来说很好:

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。或移动到实体框架:)