我一直在努力解决这个问题,并没有找到真正有效的解决方案.当我搜索一些数据时,我想基于多个单词过滤掉数据.
我的输入值通过使用标准的.Split函数进行分割.
string[] searchstrings = MessageResult.Split(' ');
Run Code Online (Sandbox Code Playgroud)
我做了一个查询(显然无法正常工作),试图过滤掉匹配searchstrings中每个字符串的所有条目.
var suggestions = (from a in query
from w in searchstrings
where a.Message.ToLower().Contains(w.ToLower())
select a).Distinct();
Run Code Online (Sandbox Code Playgroud)
query是我的变量,它包含所有数据.如何使此查询实际上只匹配包含searchstrings中每个字符串的条目?
Kas*_*aar 17
我认为下面的代码可以解决您的问题.它检查searchstring中的所有单词是否都在查询中(a).
var suggestions = (from a in query
where searchstrings.All(word => a.ToLower().Contains(word.ToLower()))
select a);
Run Code Online (Sandbox Code Playgroud)
dig*_*All 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)));
Run Code Online (Sandbox Code Playgroud)
注意:
ToLower()在Where子句外执行,以节省大量对该方法的调用.
| 归档时间: |
|
| 查看次数: |
9117 次 |
| 最近记录: |