在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语句正常工作
可能你想要下面的代码。它将在检查两个过滤器值后检索记录。
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)));