C# 使用Linq to实体执行字符串搜索

C# 使用Linq to实体执行字符串搜索,c#,.net,string,linq,linq-to-entities,C#,.net,String,Linq,Linq To Entities,我想在Linq to Entities中启用此函数(因此在SQL Server上进行过滤) publicstaticboolcontainsany(此字符串源代码,StringComparison, IEnumerable搜索条件) { 返回searchTerms.Any(searchTerm=>source.Contains(searchTerm,comparison)); } 我的目标是搜索一个表,并通过使用上述函数过滤某个列来限制结果,即GetContacts()。其中(c=>c.Ful

我想在Linq to Entities中启用此函数(因此在SQL Server上进行过滤)

publicstaticboolcontainsany(此字符串源代码,StringComparison,
IEnumerable搜索条件)
{
返回searchTerms.Any(searchTerm=>source.Contains(searchTerm,comparison));
}
我的目标是搜索一个表,并通过使用上述函数过滤某个列来限制结果,即
GetContacts()。其中(c=>c.FullName.ContainAny(searchTerm))
首先,这很棘手(如果可能,我不知道)在表达式中使用StringComprison并期望Linq 2实体将其转换为正确的Sql语句

其次,在表达式中使用像ContainsAny这样的自定义函数也很棘手

如果我是你,简单的解决方案是:

GetContacts().Where(c => searchTerms.Any(term => c.FullName.Contains(term)))

它应该在EF4中工作。

看看我创建的nuget包

这将启用以下(及更多)功能,这些功能将返回搜索词出现在指定属性中的结果

var result = GetContacts().Search("searchTerm", c => c.FullName);
要搜索多个术语,可以执行以下操作:

var result = GetContacts().Search(searchTerms, c => c.FullName);
以上内容将返回属性中出现任何搜索词的结果

这将建立一个表达式树,该树对不在内存中的数据库执行搜索,因此仅从服务器返回匹配结果


有关更多信息,请查看或我的

我假设
源代码应该是
IEnumerable
类型?@Douglas,我已经更新了我的问题+1,指出
任何
都可以与本地序列一起使用(Linq to Sql不能这样做)。不过,
StringComparison
部分没有涵盖。我明白了。由于默认的SQL字符串比较不区分大小写,因此应该执行我希望它执行的操作。无论如何,如果您找到一种方法来克服并实现
StringComparisong
请停下来,把它放在这里,这样我就可以将它包含在我的扩展库中。。。谢谢你,老兄!
var result = GetContacts().Search(searchTerms, c => c.FullName);