Ano*_*ser 6 c# entity-framework
我正在尝试搜索数据库以查看字符串是否包含搜索项列表的元素.
var searchTerms = new List<string> { "car", "232" };
var result = context.Data.Where(data => data.Name.Contains(searchTerms) ||
data.Code.Contains(searchTerms));
Run Code Online (Sandbox Code Playgroud)
如果searchTerms是一个字符串,这将有效,但我一直试图让它与字符串列表一起使用.
基本上我需要SQL来说
SELECT * FROM Data
WHERE Name LIKE '%car%'
OR Name LIKE '%232%'
OR Code LIKE '%car%'
OR Code LIKE '%232%'
Run Code Online (Sandbox Code Playgroud)
列表中包含任何列表的linq似乎是我能找到的关闭情况.
Where(data => searchTerms.Contains(data.Name) || searchTerms.Contains(data.Code) 只会将完全匹配带回搜索字词列表.
我也尝试在Entity Framework中搜索多个关键字搜索,并且已经用尽了这些努力.有没有办法实现我的目标?
Nin*_*Nye 13
我迟到了,但是使用SearchExtensions nuget包你可以做类似以下的事情
var result = context.Data.Search(x => x.Name, x => x.Code).Containing(searchTerms);
Run Code Online (Sandbox Code Playgroud)
这将构建一个表达式树,因此仍将在服务器上执行查询(而不是在内存中),并且基本上将运行您想要的SQL
Sel*_*enç 11
您可以尝试使用Any方法,我不确定它是否受支持但是值得尝试:
var result = context.Data.Where(data => searchTerms.Any(x => data.Name.Contains(x)) ||
searchTerms.Any(x => data.Code.Contains(x));
Run Code Online (Sandbox Code Playgroud)
如果这样NotSupportedException您可以在AsEnumerable之前添加Where以获取所有记录并在内存而不是DB中执行查询.
| 归档时间: |
|
| 查看次数: |
9567 次 |
| 最近记录: |