7

コンパイル時に用語がわからない場合に、StartsWithを使用して複数の用語のそれぞれを検索するための推奨される方法はありますか?

私はこのようなものを想像しています:

var searchTerms = "John Doe".Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
var query = session.Query<Person, PersonIndex>()
                   .Where(x => x.FirstName.StartsWithAnyOf(searchTerms) ||
                               x.LastName.StartsWithAnyOf(searchTerms));

クエリは次と同等になります。

var query = session.Query<Person, PersonIndex>()
                   .Where(x => x.FirstName.Starts(searchTerms[0]) ||
                               x.LastName.StartsWith(searchTerms[0]) ||
                               x.FirstName.Starts(searchTerms[1]) ||
                               x.LastName.StartsWith(searchTerms[1]));

実行時にLINQクエリ(PredicateBuilderなど)を構築するための答えはありますか?

4

2 に答える 2

4

LuceneQueryの使用(他に何をしているかによっては、副次句を使用したい場合があります):

var searchTerms = "John Doe".Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

var query = session.Advanced.LuceneQuery<Person, PersonIndex>();
query = query.OpenSubclause(); // optional

foreach (var term in terms)
{
    query = query.WhereStartsWith("FirstName"), term).OrElse();
    query = query.WhereStartsWith("LastName"), term).OrElse();
}

query = query.WhereEquals("Id", null);
query = query.CloseSubclause(); // if OpenSubclause() was used

強く型付けされた変数名が必要な場合は、次の回答を確認してください:https ://stackoverflow.com/a/301957/941536

于 2012-06-29T18:51:54.133 に答える
0

あなたがやろうとしていることは何ですか?分析されたフィールドを使用してから、.Searchではなくを発行する方がおそらく良いでしょう.Where

于 2012-06-27T06:52:30.310 に答える