2012-07-19 19 views
7

मैं पूरे दिन इस समस्या को हल करने का प्रयास कर रहा हूं, और मुझे कोई समाधान नहीं मिला है जो वास्तव में काम करता है। जब मैं कुछ डेटा खोजता हूं, तो मैं एकाधिक शब्दों के आधार पर डेटा फ़िल्टर करना चाहता हूं।LINQ क्वेरी एकाधिक शब्दों से मेल खाने के लिए

मेरा इनपुट मान मानक का उपयोग कर विभाजित है। स्प्लिट-फ़ंक्शन।

string[] searchstrings = MessageResult.Split(' '); 

मैं एक प्रश्न (जो स्पष्ट रूप से ठीक से काम नहीं करता है) कि सभी प्रविष्टियों कि searchstrings में हर स्ट्रिंग से मेल खाता को फिल्टर करने की कोशिश करता है बनाया है।

    var suggestions = (from a in query 
           from w in searchstrings 
           where a.Message.ToLower().Contains(w.ToLower()) 
           select a).Distinct(); 

क्वेरी मेरा वैरिएबल है जिसमें सभी डेटा है। मैं यह क्वेरी वास्तव में केवल उन प्रविष्टियों से मेल खाने के लिए कैसे कर सकता हूं जिनमें खोज स्ट्रिंग में प्रत्येक स्ट्रिंग शामिल है?

+0

स्पष्टीकरण के लिए, आप स्ट्रिंग्स को स्ट्रिंग से चाहते हैं जिसमें प्रत्येक स्प्लिट स्ट्रिंग शामिल है, जो कहने के लिए, ** खोज में प्रत्येक ** स्ट्रिंग परिणामस्वरूप तारों में होना चाहिए? – Breland

+0

यदि @ ब्रलैंड का प्रश्न सत्य है, तो क्या यह बदलता काम करेगा। सभी मैं उस अभिव्यक्ति द्वारा उत्पन्न क्वेरी देखना चाहता हूं – jjchiw

+0

आपका अंतिम आउटपुट क्या होना चाहिए? – Yasser

उत्तर

17

मुझे लगता है कि नीचे दिए गए कोड को आपकी समस्या का समाधान करना चाहिए। यह जांचता है कि सर्चस्ट्रिंग में सभी शब्द एक प्रश्न में हैं (ए)।

var suggestions = (from a in query 
        where searchstrings.All(word => a.ToLower().Contains(word.ToLower())) 
        select a); 
+0

यह बहुत अच्छा काम किया, धन्यवाद! 'टोलर' कॉल को दोबारा करने के लिए – Alexander

16
var query = new string[] 
{ 
    "abc foo bar xyz john doe", 
    "abc foo bar xyz doe", 
    "hello world", 
    "abc foo bar john doe", 
}; 

var searchstrings = new string[] 
{ 
    "abc", 
    "foo", 
    "john", 
    "xyz", 
}; 

searchstrings = searchstrings.Select(x => x.ToLower()).ToArray(); 

var results = query.Select(x => x.ToLower()) 
        .Where(x => searchstrings.All(y => x.Contains(y))); 

नोट:
ToLower() कि विधि के लिए कॉल का एक बहुत बचाने के लिए, Where खंड के बाहर किया जाता है।

+3

+1 ... –

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