我一整天都在努力调整下面的教程来搜索多个列。
https://docs.asp.net/en/latest/tutorials/first-mvc-app/search.html
搜索单个列效果很好。我的问题是,我想在多个列中搜索关键字,我所尝试的一切都导致了类似的行为,结果是作为"And"而不是"Or"运算符(因此,如果它出现在两列中,它就起作用,而不是出现在任何一列中)。我试过"case"语句"if else"等,但我的逻辑让我失望了。我喜欢在的任一列中搜索存在
我的控制器代码
public ActionResult Search(string searchString)
{
var ClipQry = from m in db.Incidents
orderby m.ClipName
select m.ClipName;
var SearchResult = from LoopVar in db.Incidents
select LoopVar;
if (!String.IsNullOrEmpty(searchString))
{
SearchResult = SearchResult.Where(s => s.ClipName.Contains(searchString));
}
return View("Search", SearchResult);
}
视图代码
<form asp-controller="Incidents" asp-action="Index" method="get">
<p>
<input type="text" name="SearchString" class="form-control" placeholder="Search...">
</p>
</form>
我试过以下方法,但它只会导致与充当"And"操作员相同的行为
if (!String.IsNullOrEmpty(searchString))
{
SearchResult = SearchResult.Where(s => s.ClipName.Contains(searchString));
SearchResult = SearchResult.Where(y => y.ClipKeywords.Contains(searchString));
}
当前代码首先对ClipName
属性进行筛选,并将结果分配给SearchResult
变量。然后在第二行中,对相同结果(SearchResult
,它是前一行的过滤结果)的ClipKeywords
属性进行过滤。因此,您可以有效地在此处执行AND。
您可以在where子句中执行或。
if (!String.IsNullOrEmpty(searchString))
{
SearchResult = SearchResult
.Where(s => s.ClipName.Contains(searchString)
||s.ClipKeywords.Contains(searchString));
}