8

私は一日中この問題を解決しようとしてきましたが、本当にうまくいく解決策を見つけていません。一部のデータを検索するときに、複数の単語に基づいてデータを除外したいと考えています。

入力値は、標準の .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 は、すべてのデータを持つ私の変数です。このクエリを実際に検索文字列のすべての文字列を含むエントリのみに一致させるにはどうすればよいですか?

4

2 に答える 2

19
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

于 2012-07-19T12:38:13.057 に答える
18

以下のコードで問題が解決すると思います。検索文字列のすべての単語がクエリに含まれているかどうかを確認します(a)。

var suggestions = (from a in query
                   where searchstrings.All(word => a.ToLower().Contains(word.ToLower()))
                   select a);
于 2012-07-19T12:36:50.920 に答える