C# 在ASP.NETMVC3.0中进行高级搜索的最佳方法?

C# 在ASP.NETMVC3.0中进行高级搜索的最佳方法?,c#,forms,search,logic,C#,Forms,Search,Logic,我正在开发ASP.net MVC 3.0 Razor视图引擎应用程序 我有一张预先搜索表,可以获得找到的客户列表 其中将包含如下字段 名字文本框 姓氏文本框 DOB文本框 地址文本框 性别下拉列表 Zipcode文本框 忽略地址复选框 最后点击提交按钮 我在列表对象中有一个客户列表 搜索表单中没有必填字段。 当用户根据表单中提供的值点击搜索时, 我的逻辑应该从保存所有客户详细信息的列表对象返回匹配结果。 因此,我想从您那里挑选一个想法。 编写最佳逻辑,根据用户提供的信息找到客户 我是这样开始的


我正在开发ASP.net MVC 3.0 Razor视图引擎应用程序
我有一张预先搜索表,可以获得找到的客户列表
其中将包含如下字段
  • 名字文本框
  • 姓氏文本框
  • DOB文本框
  • 地址文本框
  • 性别下拉列表
  • Zipcode文本框
  • 忽略地址复选框

  • 最后点击提交按钮
    我在列表对象中有一个客户列表
    搜索表单中没有必填字段。
    当用户根据表单中提供的值点击搜索时, 我的逻辑应该从保存所有客户详细信息的列表对象返回匹配结果。

    因此,我想从您那里挑选一个想法。
    编写最佳逻辑,根据用户提供的信息找到客户

    我是这样开始的

    if (fname != "" && lname == "")
            {
                return _CustomerList.FindAll(p => p.FirstName == fname);
            }
            else if (fname == "" && lname != "")
            {
                return _CustomerList.FindAll(p => p.LastName == lname);
            }
    
            else if (fname != "" && lname != "")
            {
                return _CustomerList.FindAll(p => p.FirstName == fname && p.LastName == lname);
            }
    return _CustomerList;
    
    我认为这不是一个有效的方法

    任何建议都会大有帮助。
    谢谢你的阅读。:)

    改用Linq和一个
    IEnumerable
    -您可以根据需要使用附加的
    Where()
    子句组合查询,并在最后使用
    ToList()
    将匹配项作为列表返回


    我想这会对你有帮助

    if (!string.IsNullOrEmpty(lname) || ! string.IsNullOrEmpty(fname))
    
    {
    
    _CustomerList= _CustomerList.Where(x =>x.LastName.Contains(lname.ToUpper().Trim()) ||               
     x.FirstName.Contains(fname.ToUpper().Trim())
    );
    
    return _CustomerList.ToList();
    
    }
    

    这是非常古老的时尚。难道你不能像chrome那样只有一个文本输入字段吗?快速搜索是现代的,现在到处都在使用,chrome,Win7开始菜单,IE9,最新的黑莓。。。您确实在后台执行智能高级搜索,但要求用户仅在一个框中输入搜索值。如果谷歌可以搜索整个互联网,你应该可以在你的数据库中搜索。@DavidePiras“你应该可以在你的数据库中搜索”,我希望我可以发表评论。这样的评论显示出理解上的重大缺陷。谷歌对其进行文本分析的数据库与任何标准的事务数据库都截然不同。全文搜索做得好总是一件很难完成的任务。这不是我的意思,我不想把google BigTable或GFS和索引与你的进行比较。无论如何,我可以自由决定。我们在几个项目中使用一个搜索框,用户最初会迷路,然后他们会学习并喜欢它。您可以通过选定字段列表中的FT或经典比较/where子句进行搜索。由此产生的用户体验是顺利的,非常感谢。我认为这将工作为我。一旦我完全实现了这一点,我将发回
    if (!string.IsNullOrEmpty(lname) || ! string.IsNullOrEmpty(fname))
    
    {
    
    _CustomerList= _CustomerList.Where(x =>x.LastName.Contains(lname.ToUpper().Trim()) ||               
     x.FirstName.Contains(fname.ToUpper().Trim())
    );
    
    return _CustomerList.ToList();
    
    }