一直在努力解决这个问题,并且不知道如何实施。似乎很容易。
我有一个带有多个关键字的搜索框。然后,我将这些关键字传递给我的存储库中的IENumerable方法。
public IEnumerable<diss> GetDissSearch(string b)
然后我将关键字放入数组 - b包含单词串并使用Split方法。
string[] sArray = strSearchString.Split();
然后我使用foreach循环来转换我的数组中的单词,但在我的foreach循环中,我将linq语句放置如下:
foreach(string s in sArray){
var myLoop = (from p in mytable
where p.userFirstName.Contains(s)
&& p.lastName.Contains(s)
select new myModel {
firstName = p.userFirstName,
lastName = p.userLastName
}).ToList();
return myLoop;
}
因此,如果用户输入两个单词 - 例如,名字和姓氏,您希望该集合将被调用两次。同样,如果用户输入中间名,则会调用三次收集。目前,此系列仅运行一次。
有没有办法根据我的数组中包含的关键字数量多次调用此可依赖项?
感谢。
答案 0 :(得分:2)
使用Any
(或All
,如果您希望所有sArray
条款存在)ex包裹搜索查询。方法,这样每个数据库行只会针对数组进行一次评估:
var myLoop = (from p in mytable
where sArray.Any(sa => p.userFirstName.Contains(sa)
&& p.lastName.Contains(sa))
select new myModel
{
firstName = p.userFirstName,
lastName = p.userLastName
}).ToList();
另外,如果您希望条款在 第一个名称或,请考虑使用&&
替换查询中的||
运算符名。