假设我有一个包含两列的数据库表(aTable)
id:int
名称:字符串
要求: 我想检索aTable.name类似于字符串列表(stringsToSearchFor)的条目。
我在做什么: 目前,我正在使用以下方法
var result=new List<aTable>;
foreach (var aString in stringsToSearchFor)
{
var r = Context.Set<aTable>()
.Any(s => s.name.Contains(searchString))
.ToList();
res.AddRange(r);
}
return result.Distinct();
为了对其进行优化,我尝试通过消除foreach来更改代码,使其成为:
return Context.Set<aTable>()
.Any(s => stringsToSearchFor.Contains(s.name))
.Distinct()
.ToList();
但是,这没有提供与前面的语句相同的结果。我相信第一句话是正确的。
我的问题:如何在不创建N个数据库查询的情况下搜索多个字符串(如第二种方法)?
答案 0 :(得分:0)
类似的事情应该起作用:
string[] stringsToSearchFor = new string[] { "text1", "text2" };
using (MyDbContext model = new MyDbContext())
{
var result = model.aTable
.Where(r => stringsToSearchFor.Any(s => r.name.Contains(s)))
.ToList();
}
答案 1 :(得分:0)
替代解决方案:使用EF 6.2 Like
:
.Where(x => stringsToSearchFor.Any(s => DbFunctions.Like(x.name, $"%{s}%")))