我想使用不同的标准进行高级搜索(过滤)。例如,如果名字可用,则查询应返回所有可用的匹配项。如果名字和姓氏都可用,那么它应该匹配名字或姓氏和类似的方式许多标准(性别,职业,教育等)
这是我的控制器方法,其中我将所有ajax数据作为参数。
[HttpPost]
public ActionResult Search(string cno, string fname, string lname, string male, string female, string stateid, string cityid, string professionid, string educationid)
{
if (Request.IsAjaxRequest())
{
var db = new clubDataContext();
/*----------Advanced Search Query-------------*/
return PartialView("SerachResult");
}
else
return RedirectToAction("Index", "home");
}
某些参数可能有空值。所以请建议最适合这种情况的LINQ查询。
答案 0 :(得分:4)
您可以选择使用c#null-coalescing operator
Users.Where(x => x.firstName == (fname??x.firstName) || x.lastName == (lname?? x.lastName)).ToList();
进一步
Users.Where(x => x.firstName.Contains(fname??x.firstName) || x.lastName.Contains(lname?? x.lastName)).ToList();
等效SQL:
SELECT * FROM User u
WHERE u.FirstName = ISNULL(@fname,u.FirstName)
OR u.LastName = ISNULL(@lname,u.LastName)