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