2012-06-26 9 views
7

Czy istnieje zalecany sposób wyszukiwania każdego z wielu terminów przy użyciu StartsWith, gdy terminy nie są znane podczas kompilacji?RavenDB szukaj dla każdego z wielu terminów przy użyciu StartsWith

mogę sobie wyobrazić coś takiego:

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

Zapytanie byłby odpowiednikiem:

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

Czy odpowiedź zbudować kwerendę LINQ w czasie wykonywania (PredicateBuilder lub podobny)?

Odpowiedz

4

Korzystanie LuceneQuery (może chcieć użyć podrozdział w zależności od tego, co jeszcze robisz):

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 

Jeśli chcesz silnie wpisane nazwy zmiennych sprawdź tę odpowiedź: https://stackoverflow.com/a/301957/941536

0

Co to jest, co próbujesz zrobić? Prawdopodobnie lepiej jest użyć analizowanego pola, a następnie wydać .Search zamiast .Where.

+0

nie sądzę '.Search' zrobi to, co chcę, chcę zwrócić _John Doe_, gdy szukany ciąg to _Jo_, _Do_, _Jo Doe_, _Jo Do_. Nie sądzę, że '.Search' zwróci _John Doe_, chyba że dopasuję jedno z analizowanych terminów? – kendaleiv

+0

Dla wyjaśnienia mam na myśli, kiedy szukany ciąg jest ** dowolnym z **. – kendaleiv

Powiązane problemy