2012-06-26 16 views
7

'u kullanarak birden çok terimin her birini arar. Terimler, derleme zamanında bilinmediğinde, StartsWith kullanarak birden çok terimi aramak için önerilen bir yol var mı?RavenDB, StartsWith

Böyle bir şey öngörülüyor:

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

zamanında (PredicateBuilder veya benzeri) bir LINQ sorgu oluşturmak için cevap mı: Sorgu eşdeğer olacaktır

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

?

cevap

0

Yapmaya çalıştığınız şey nedir? Muhtemelen analiz edilmiş bir alan kullanmaktan ve .Where yerine .Search yayınlamaktan daha iyidir. LuceneQuery kullanma

+0

:

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 

sen kesinlikle yazılı istediğiniz takdirde değişken adları bu cevabı kontrol .Search 'ne istediğimi yapacağım, arama dizgisi _Jo_, _Do_, _Jo Doe_, _Jo Do_ olduğunda _John Doe_ döndürmek istiyorum. Ben sanmıyorum. Analiz edilen terimlerden biriyle uyuşmadığım sürece, 'Arama' _John Doe_ 'i iade edecek mi? – kendaleiv

+0

Sadece açıklamak gerekirse, arama dizgisi ** herhangi bir ** olduğunda. – kendaleiv

İlgili konular