LINQ查询匹配多个单词

时间:2012-07-19 12:28:31

标签: c# linq

我一直在努力解决这个问题,并且找不到真正有效的解决方案。当我搜索一些数据时,我想根据多个单词过滤掉数据。

我的输入值是使用标准.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中每个字符串的条目?

2 个答案:

答案 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子句之外执行,以节省大量对该方法的调用。

相关问题