如何检查字符串是否包含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));