【发布时间】:2015-03-24 11:24:18
【问题描述】:
基本上,我有一个产品列表和一个搜索选项。当搜索多个单词时,我想返回包含按任何顺序搜索的所有单词的任何产品。
因此,如果用户搜索“green shirt”,返回的列表将包括“green t-shirt large”、“t-shirt green medium”等。我的(坏)代码:
public List<Products> FindProductsByName(string query, int limit)
{
string[] words = query.ToLower().Split(' ');
List<Products> products = new List<Products>();
foreach (var word in words)
{
products.AddRange(All.Where(x => x.ProductName.ToLower().Contains(word)).Take(limit).ToList());
//this will return all products which contains ANY word in the searched word list
}
return products;
}
所以基本上,我想要
All.Where(x => x.Productname.ToLower().Contains(words[0]) && x.Productname.ToLower().Contains(words[1]) ...
但我不知道搜索查询中有多少字。我觉得这应该很容易,但我的大脑今天不工作。我错过了什么?
【问题讨论】:
-
你能发一个dotnetfiddle吗?小提琴应该是一个工作示例。
-
将两个字符串拆分成一个单词列表;然后对两个字符串进行排序并运行 *merge-comparison。
-
Set operations 文章应该可以帮助您选择适合您需要的两组操作。