【发布时间】:2013-09-26 08:36:23
【问题描述】:
我遇到了一个在此网站上搜索良好的异常:
System.NotSupportedExceptionLocal 序列不能在查询运算符的 LINQ to SQL 实现中使用,但 Contains 运算符除外。
我发现this 的回答很有帮助。然而,看似矛盾的答案,这个查询对我来说很好:
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)))));
我不想将记录列表拉入本地内存进行评估。
另一个复杂的问题是localListOfSearchStrings 可能包含名字或姓氏。
所以我真的需要评估
localListOfSearchStrings.Any(str =>
CompanyAssociation.Contact.FullName.Contains(str))
而不是,例如,
listOfLocalSearchStrings.Contains(CompanyAssociation.Contact.FullName)
【问题讨论】:
-
看到异常消息,令人惊讶的是第一个查询运行良好。看起来您需要一个解决方案来构建“OR”查询,例如使用 PredicateBuilder。或者转移到实体框架:)
标签: c# linq-to-sql