LINQ查询中的高级搜索

时间:2014-04-22 06:22:00

标签: asp.net-mvc linq asp.net-mvc-4

我想使用不同的标准进行高级搜索(过滤)。例如,如果名字可用,则查询应返回所有可用的匹配项。如果名字和姓氏都可用,那么它应该匹配名字或姓氏和类似的方式许多标准(性别,职业,教育等)

这是我的控制器方法,其中我将所有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查询。

1 个答案:

答案 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)