在MVC . net中使用LINQ lambda过滤多个文本框的数据库搜索

本文关键字:文本 搜索 数据库 过滤 lambda net MVC LINQ | 更新日期: 2023-09-27 18:08:14

我基本上已经创建了一个修改过的MVC模板,用于处理一些报表的CRUD操作。我想要完成的是过滤基于多个输入的报告。我已经设法创建了一个基本的搜索函数,基本上可以搜索数据库中的每一列(除了日期,我还没有完全弄清楚),但是我需要三个文本框,每个文本框代表它自己的列,用于过滤行。一个用于标识报告的列,一个用于日期(可能是两个,以便我可以在日期之间搜索),一个用于客户。

这是控制器中的代码:
public ActionResult Avvik(string searchAWB, string searchMottaker)
    {
        var rapports = db.Rapports.Include(r => r.Årsak);
        if (!String.IsNullOrEmpty(searchAWB))
        {
            rapports = rapports.Where(r => r.AWB.Contains(searchAWB));
        }
        else if (!String.IsNullOrEmpty(searchMottaker))
        {
            rapports = rapports.Where(r => r.Mottaker.Contains(searchMottaker));
        }
        return View("Rapporter/Avvik", rapports.ToList());
    }

这是视图中的一些代码:

@Html.ActionLink("Back to admin tools", "Adminpanel", "Admin")
@using (Html.BeginForm())
{
    <p>AWB: @Html.TextBox("SearchAWB")
    Mottaker: @Html.TextBox("SeachRecipient")
    <input type="submit" value="Filter"/></p>
}

我在if/else中尝试了OR(||)操作符的一些变体,最终得到了上面的代码。只有第一个if语句正常工作

在MVC . net中使用LINQ lambda过滤多个文本框的数据库搜索

可能你想要下面的代码。它将在检查两个过滤器值后检索记录。

 rapports = rapports.Where(r =>  (String.IsNullOrEmpty(searchAWB) || r.AWB.Contains(searchAWB)) 
&& (String.IsNullOrEmpty(searchMottaker) || r.Mottaker.Contains(searchMottaker)));

如果您需要满足任意一个条件的所有记录,请使用下面的代码

 rapports = rapports.Where(r =>  (String.IsNullOrEmpty(searchAWB) || r.AWB.Contains(searchAWB)) 
|| (String.IsNullOrEmpty(searchMottaker) || r.Mottaker.Contains(searchMottaker)));