【发布时间】:2018-08-20 09:37:58
【问题描述】:
假设我有一个包含两列的数据库表(aTable)
id : 整数
名称:字符串
要求: 我想检索 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 个数据库查询的情况下搜索多个字符串(如第二种方法)?
【问题讨论】:
-
我通常使用 Context.Set
().AsEnumerable().Select(x => x.Field ("name")).Distinct().ToList(); . -
这会从表中选择列名中的所有条目。但我想选择匹配(LIKE sql 语句)字符串列表(不是单个字符串)的条目
-
然后使用 Context.Set
().AsEnumerable().Select(x => x.Field ("name")).Distinct().Where(x => stringsToSearchFor.Contains(x)).ToList();
标签: c# entity-framework linq linq-to-sql entity-framework-6