我想在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))
。
答案 0 :(得分:6)
首先,在Expressions中使用StringComprison并且期望Linq 2实体将其转换为正确的Sql语句是非常棘手的(如果可能的话,我不知道)。
其次,在表达式中使用像 ContainsAny 这样的自定义函数也很棘手。
所以,如果我是你,那么简单的解决方案就是:
GetContacts().Where(c => searchTerms.Any(term => c.FullName.Contains(term)))
哪个适用于EF4。
答案 1 :(得分:0)
看看我创建的nuget包
这将启用以下(及更多),这将返回搜索词出现在指定属性
中的结果var result = GetContacts().Search("searchTerm", c => c.FullName);
要搜索多个字词,您可以执行以下操作:
var result = GetContacts().Search(searchTerms, c => c.FullName);
上述内容将返回任何搜索字词出现在属性
中的结果这构建了一个表达式树,它对不在内存中的数据库执行搜索,因此只从服务器返回匹配的结果。
有关详细信息,请查看 projects GitHub page 或 blog posts