[英]Perform string search with Linq to Entities
我想在Linq to Entities中启用此功能(因此过滤发生在SQL Server上)?
public static bool ContainsAny(this string source, StringComparison comparison,
IEnumerable<string> searchTerms)
{
return searchTerms.Any(searchTerm => source.Contains(searchTerm, comparison));
}
我的目标是搜索表并通过使用上述函数过滤某个列来限制结果,即GetContacts().Where(c => c.FullName.ContainAny(searchTerm))
。
首先,在Expressions中使用StringComprison并期望Linq 2实体将其转换为正确的Sql语句是棘手的(如果可能的话,我不知道)。
其次,在Expression中使用像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);
以上将返回任何搜索词出现在属性中的结果
这会构建一个表达式树,它对数据库而不是内存执行搜索,因此只从服务器返回匹配的结果。
有关更多信息,请查看项目GitHub页面或我的博客文章
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.