RavenDB searches each of several terms with StartsWith

Is there a recommended way to search for each of several terms with StartsWith when the terms are not known at compile time?

I imagine something like this:

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

The request will be equivalent to:

 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])); 

Is the response to creating a LINQ query at runtime (PredicateBuilder or similar)?

+7
source share
2 answers

Using LuceneQuery (might want to use a subpoint depending on what you do):

 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 

If you want strongly typed variable names to check this answer: stack overflow

+4
source

What are you trying to do? You are probably better off using the parsed field and then .Search rather than .Where .

0
source

All Articles