MVC 5搜索多个列



我一整天都在努力调整下面的教程来搜索多个列。

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));
}

最新更新