LINQ to SQL查询帮助(字符串包含字符串数组中的任何字符串)

我一直在用这个撕掉我的头发。 我有一系列搜索术语,我正在尝试使用LINQ to SQL查询来搜索数组中每个项目的字段值。

我到目前为止..

var searchResults = from x in SDC.Staff_Persons where staffTermArray.Any(pinq => x.Forename.Contains(pinq)) || staffTermArray.Any(pinq => x.Surname.Contains(pinq)) || staffTermArray.Any(pinq => x.Known_as.Contains(pinq)) orderby x.Surname select x; 

……但后来了

除Contains()运算符外,本地序列不能用于查询运算符的LINQ to SQL实现

……现在我被卡住了。

如果有人能帮忙,我会非常感激。 提前致谢。

我不确定这是否是最简单的解决方案,但这将有效:

 var filter = CreateFilter(staffTermArray); var searchResults = from person in SDC.Staff_Persons.Where(filter) orderby person.Surname select person; private static Expression> CreateFilter( string[] staffTermArray) { var predicate = PredicateBuilder.False(); foreach (var staffTerm in staffTermArray) { // We need to make a local copy because of C# weirdness. var ping = staffTerm; predicate = predicate.Or(p => p.Forename.Contains(ping)); predicate = predicate.Or(p => p.Surname.Contains(ping)); predicate = predicate.Or(p => p.Known_as.Contains(ping)); } return predicate; } 

您需要使用PredicateBuilder来实现此目的。

一种选择是在客户端而不是在SQL中进行过滤。 您可以通过调用AsEnumerable()来强制在客户端上评估的where 。 但是,这意味着在测试匹配之前,表的每一行都会加载到内存中,因此如果搜索只匹配大表中的少量结果,则可能效率低得令人无法接受。

 var allPersons = from x in SDC.Staff_Persons orderby x.Surname select x; var searchResults = from x in allPersons.AsEnumerable() where staffTermArray.Any(pinq => x.Forename.Contains(pinq)) || staffTermArray.Any(pinq => x.Surname.Contains(pinq)) || staffTermArray.Any(pinq => x.Known_as.Contains(pinq)) select x;