我一直在努力解决这个问题,并且找不到真正有效的解决方案。当我搜索一些数据时,我想根据多个单词过滤掉数据。
我的输入值是使用标准.Split功能分割的。
string[] searchstrings = MessageResult.Split(' ');
我做了一个查询(显然无法正常工作),试图过滤掉匹配搜索字符串中每个字符串的所有条目。
var suggestions = (from a in query
from w in searchstrings
where a.Message.ToLower().Contains(w.ToLower())
select a).Distinct();
query是我的变量,它包含所有数据。如何使此查询实际上只匹配包含searchstrings中每个字符串的条目?
答案 0 :(得分:17)
我认为以下代码可以解决您的问题。它检查searchstring中的所有单词是否都在查询中(a)。
var suggestions = (from a in query
where searchstrings.All(word => a.ToLower().Contains(word.ToLower()))
select a);
答案 1 :(得分:17)
var query = new string[]
{
"abc foo bar xyz john doe",
"abc foo bar xyz doe",
"hello world",
"abc foo bar john doe",
};
var searchstrings = new string[]
{
"abc",
"foo",
"john",
"xyz",
};
searchstrings = searchstrings.Select(x => x.ToLower()).ToArray();
var results = query.Select(x => x.ToLower())
.Where(x => searchstrings.All(y => x.Contains(y)));
注意:
ToLower()
在Where
子句之外执行,以节省大量对该方法的调用。