Asp.net mvc LINQ查询中的高级搜索

Asp.net mvc LINQ查询中的高级搜索,asp.net-mvc,linq,asp.net-mvc-4,Asp.net Mvc,Linq,Asp.net Mvc 4,我想使用不同的条件进行高级搜索(筛选)。例如,如果firstname可用,那么查询应该返回所有可用的匹配项。如果名字和姓氏都可用,那么它应该与名字或姓氏以及类似的许多标准(性别、职业、教育等)相匹配 这是我的控制器方法,其中我将所有ajax数据作为参数 [HttpPost] public ActionResult Search(string cno, string fname, string lname, string male, string female, string state

我想使用不同的条件进行高级搜索(筛选)。例如,如果firstname可用,那么查询应该返回所有可用的匹配项。如果名字和姓氏都可用,那么它应该与名字或姓氏以及类似的许多标准(性别、职业、教育等)相匹配

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

您可以选择使用c#

进一步

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)

你可以选择使用c#

进一步

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)

这不是为我写代码的网站。这是因为我有那个代码,但它不起作用/我不知道如何使它成为网站的一部分。展示你的努力,当你在做某件事时回来。这不是为我写代码。这是因为我有那个代码,但它不起作用/我不知道如何使它成为网站的一部分。展示你的努力,当你在某个东西上叠加时回来。什么是f??x.firstName?如果fname为null,那么用户x.firstName。我已经用它的等价SQL更新了答案。那么,如何存储这个搜索结果呢?我是否应该制作列表并将其与此查询一起分配?这取决于您希望访问结果的时间。上述查询将返回名称匹配的用户列表。您可以通过创建列表users=overquery;,来存储输出,会话变量,ViewBag/ViewData或缓存中。这同样取决于IQueryable对延迟加载/延迟执行的支持。假设用户实体将地址作为导航属性,那么使用IQueryable,我们可以避免在引用用户实体时加载地址集合。什么是f??x.firstName?如果fname为null,则表示用户x.firstName。我已经用它的等价SQL更新了答案。那么,如何存储这个搜索结果呢?我是否应该制作列表并将其与此查询一起分配?这取决于您希望访问结果的时间。上述查询将返回名称匹配的用户列表。您可以通过创建列表users=overquery;,来存储输出,会话变量,ViewBag/ViewData或缓存中。这同样取决于IQueryable对延迟加载/延迟执行的支持。假设用户实体将地址作为导航属性,那么使用IQueryable,我们可以避免在引用用户实体时加载地址集合。