并非所有数据库引擎都支持正则表达式。即使对于那些这样做的人,我也不相信任何 LINQ-to-SQL 提供者知道如何正确地将它们转换为 SQL。您唯一的选择将是客户端评估,您可以使用AsEnumerable 实现。
result.AddRange((
from app in db.AllJobModel.AsEnumerable()
where Regex.IsMatch(app.JobTitle, "\b" + listjobs + "\b", RegexOptions.IgnoreCase) &&
Regex.IsMatch(app.locationName, "\b" + searchLocation + "\b", RegexOptions.IgnoreCase)
select app
));
注意这里的意思是所有的记录都会从数据库中返回,过滤会在内存中进行。
根据您的数据,您可能可以通过使用 Like '% XYZ %' 的等效项来获得(注意前后的空格)。这至少会转化为 SQL 并完全在服务器上而不是在内存中运行:
result.AddRange((
from app in db.AllJobModel.AsEnumerable()
where app.JobTitle.Contains(" " + listjobs + " ") &&
app.locationName.Contains(" " + searchLocation + " ")
select app
));
或者您可以将Contains、StartsWith 和EndsWith(和一个空格)组合起来,这样您应该会更接近一些:
result.AddRange((
from app in db.AllJobModel.AsEnumerable()
where (app.JobTitle.Contains(" " + listjobs + " ") || app.JobTitle.StartsWith(listjobs + " ") || app.JobTitle.EndsWith(" " + listjobs)) &&
(app.locationName.Contains(" " + searchLocation + " ") || app.locationName.StartsWith(searchLocation + " ") || app.locationName.EndsWith(" " + searchLocation))
select app
));
不幸的是,您将无法完全匹配您的正则表达式,但您应该能够接近。