2012-06-26 10 views
7

का उपयोग कर एकाधिक शर्तों में से प्रत्येक के लिए खोज करता है क्या स्टार्ट्स का उपयोग करते हुए एकाधिक शब्दों में से प्रत्येक को खोजने का एक अनुशंसित तरीका है जब शब्दों को संकलित समय पर ज्ञात नहीं किया जाता है?RavenDB StartsWith

मैं कुछ इस तरह की कल्पना:

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 या समान) है:

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

क्वेरी के बराबर हो सकता है?

उत्तर

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

0

आप क्या करने की कोशिश कर रहे हैं? आप शायद एक विश्लेषण क्षेत्र का उपयोग करके बेहतर हैं और फिर .Where की बजाय .Search जारी कर रहे हैं।

+0

मुझे नहीं लगता कि 'खोज' जो मैं चाहता हूं वह करूँगा, मैं _John Doe_ वापस करना चाहता हूं जब खोज स्ट्रिंग _Jo_, _Do_, _Jo Doe_, _Jo Do_ है। मुझे नहीं लगता कि '.Search' वापस लौटाएगा जॉन जॉय_ जब तक कि मैं विश्लेषण शर्तों में से किसी एक से मेल नहीं खाता? – kendaleiv

+0

बस स्पष्ट करने के लिए, मेरा मतलब है कि जब खोज स्ट्रिंग ** ** में से कोई है। – kendaleiv