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查询应该如何。如有任何帮助,将不胜感激
由于您不知道要输入什么或要输入多长时间,我建议您执行以下操作:
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);
等等。您可以完全控制条件:只需确保它解析为后续查询。