ASP.NET MVC 3-使用多个术语进行搜索

本文关键字:术语 搜索 NET MVC ASP | 更新日期: 2023-09-27 18:19:34

我有一种方法,可以在数据库中搜索特定的客户。目前只需要一个术语,但我希望能够搜索多个术语(例如客户的账号和姓名)。以下是我的方法:

public List<AXCustomer> allCustomers(string id)
{
    string[] searchstring = id.Split(' ');
    List<AXCustomer> customer = new List<AXCustomer>();
    // if 3 terms are entered
    if (searchstring.Length > 2)
    {
    }
    // if 2 terms are entered
    else if (searchstring.Length > 1)
    {
    }
    // revert back to default search
    else
    {
        customer = context.AXCustomers.Where(x => x.ACCOUNTNUM.Contains(id) ||
                   x.NAME.Contains(id) || x.ZIPCODE.Contains(id)).ToList();
    }
    return customer;
}

正如你所看到的,我决定对输入的每个术语进行拆分(我假设每个术语都会用空格分隔),但我不确定对于超过一个的术语,我的LINQ查询应该如何。如有任何帮助,将不胜感激

ASP.NET MVC 3-使用多个术语进行搜索

由于您不知道要输入什么或要输入多长时间,我建议您执行以下操作:

public List<AXCustomer> allCustomers(string id)
{
    string[] searchstring = id.Split(' ');
    List<List<AXCustomer>> customerlists = new List<List<AXCustomer>>();

    foreach (string word in searchstring)
    {
        customerlists.Add(context.AXCustomers.Where(x => x.ACCOUNTNUM.Contains(word) || x.NAME.Contains(word) || x.ZIPCODE.Contains(word)).ToList());
    }
    //Then you just need to see if you want ANY matches or COMPLETE matches.
    //Throw your results together in a List<AXCustomer> and return it.

    return mycombinedlist;
}
  • 任意匹配=将所有列表放在一起,然后取不同的列表
  • 完全匹配=您必须检查所有客户列表中出现的项目

它会正常工作。我在我的项目中使用了类似类型的查询,它似乎工作得很好。以下是的代码片段

PagedList.IPagedList<Product> PagedProducts = dbStore.Products.Where(p => p.Name.Contains(query) || p.MetaKeywords.Contains(query)).ToList().ToPagedList(pageIndex, PageSize);

顺便说一句,它也在实时服务器上运行。

您可以按照以下方式动态attach任意多个条件:

customer = context.AXCustomers.Where(x => x.ACCOUNTNUM.Contains(id));
customer = customer.Where(Condition 2);
customer = customer.Where(Condition 3); 

等等。您可以完全控制条件:只需确保它解析为后续查询。