2011-11-04 10 views
6

कहो शामिल मैं 3 ग्राहक नाम है:Linq - StartsWith द्वारा आदेश तो

Microsoft 
Another customer also called Microsoft 
A third customer called Microsoft 

अब अगर मैं इस तरह ग्राहकों को क्वेरी ...

var q = (from cust in db.Cust 
        where cust.Name.Contains("Microsoft") 
        orderby cust.Name ascending 
        select cust) 

... मैं इस आदेश मिलता है:

A third customer called Microsoft 
Another customer also called Microsoft 
Microsoft 

जो मैं चाहता तथ्य यह है कि यह "माइक्रोसॉफ्ट" के साथ शुरू होता पर आधारित पहली माइक्रोसॉफ्ट प्राप्त करने के लिए, है।

बदलने StartsWith को शामिल के पाठ्यक्रम मुझे 1 के बजाय 3.

का परिणाम यह किसी एक क्वेरी में किया जा सकता है के साथ छोड़ देता है?

+0

मुझे ऐसा नहीं लगता है, आपको लगभग भारोत्तोलन के साथ पूर्ण पाठ क्वेरी का उपयोग करने की आवश्यकता है। – Sam

+0

@ सैम - मैंने पूर्ण पाठ खोज छोड़ दी। खोज में सफेद रिक्त स्थान का उपयोग करते समय मुझे सिरदर्द दिया। – Malako

उत्तर

14

शायद

var q = (from cust in db.Cust 
        where cust.Name.Contains("Microsoft") 
        orderby cust.Name.IndexOf("Microsoft"), 
          cust.Name.Length ascending 
        select cust) 
+0

वाह जो तेज़ था! सुरुचिपूर्ण! – Malako

+0

यह आपकी समस्या के लिए एक बहुत अच्छा समाधान है। –

3

आप मैच के प्रतिशत के आधार पर आदेश कर सकते हैं।

orderby "Microsoft".Length * 1.0/cust.Name.Length 

यह सिर्फ माइक्रोसॉफ्ट के लिए 100% उपज और अन्य मैचों के लिए बहुत कम होगा।

+0

एक माइक्रोसॉफ्ट माइक्रोसॉफ्टबी के समान दृष्टिकोण के साथ मिलता है –

+0

दिलचस्प समाधान। हालांकि अवरोही जोड़ने की जरूरत है। थम्स अप! – Malako

+0

@ वेलेंटाइन - ठीक है। मैं आपके समाधान के साथ रहूंगा। – Malako

संबंधित मुद्दे