2011-06-17 6 views
8

हाय मैं अनुमानित अभिव्यक्तियों का उपयोग करके खोज स्ट्रिंग के आधार पर एक सूची बनाना चाहता हूं।गतिशील रूप से भविष्यवाणी कैसे करें

मेरे पास प्रकार के उत्पादों की एक सूची में अलग-अलग नाम हैं।

List<products> list1 = new List<products>(); 

     list1.Add(new products("sowmya")); 
     list1.Add(new products("Jane")); 
     list1.Add(new products("John")); 
     list1.Add(new products("kumar")); 
     list1.Add(new products("ramya")); 
     listBox1.ItemsSource = list1; 

अब मैं उपयोगकर्ता input.User के आधार पर विभाजक के रूप में '+' के साथ n तार का कोई प्रवेश करेंगे सामग्री को फ़िल्टर करना चाहते हैं। तार प्राप्त करने के बाद मैं इस

private void textBox1_KeyDown(object sender, KeyEventArgs e) 
    { 
     List<products> list2 = new List<products>(); 
     Expression<Func<products, bool>> predicate = PredicateBuilder.True<products>(); 
     if (e.Key == Key.Enter) 
     { 
      string Searchstring = textBox1.Text.ToString().Trim(); 
      string[] separator = new string[] { "+" }; 
      string[] SearchItems=Searchstring.Split(separator,StringSplitOptions.None); 
      foreach (string str in SearchItems) 
      { 
       string temp = str; 
       predicate =p => p.Name.Contains(temp.ToLower());     
      } 

      list2 = list1.AsQueryable().Where(predicate).ToList(); 
      listBox1.ItemsSource = list2; 
     } 
    } 

की तरह वस्तु विधेय के लिए तो मैं एक से अधिक स्ट्रिंग दर्ज (Sowmya + जेन + जॉन) ने अपने ही अंतिम स्ट्रिंग दे रही है (जॉन) परिणाम उन्हें पारित करेंगे लेकिन मैं की एक सूची चाहते हैं सभी मिलान तार

कृपया इस प्रश्न का उत्तर दें क्योंकि मैं यह कोशिश कर रहा हूं लेकिन मुझे परिणाम नहीं मिल सका।

कृपया कुछ मदद धन्यवाद।

+0

डुप्ली: http://stackoverflow.com/questions/845059/how-do-i- गतिशील-create-an-expressionfuncmyclass-bool-predicate –

उत्तर

12

विधेय के रूप में झूठी

Expression<Func<products, bool>> predicate = PredicateBuilder.False<products>(); 

आप मुझे यकीन है कि विधेय उदाहरण एक और विधि है कि नहीं कर रहा हूँ के रूप में Or

foreach (string str in SearchItems) 
{ 
    string temp = str; 
    predicate = predicate.Or(p => p.NameToLower().Contains(temp.ToLower()));     
} 
+0

यदि मैं उपयोग करता हूं और गठबंधन करने के लिए सभी सूची आइटम देने की भविष्यवाणी करता हूं लेकिन नहीं मिलान स्ट्रिंग परिणाम – Sowmya

+0

@Sowmya ने मेरा जवाब अपडेट किया। आपको भविष्यवाणी – Eranga

+0

के अंदर 'temp' not' str' का उपयोग करने की आवश्यकता नहीं है हे एरंगा आपको बहुत अच्छा काम करने के लिए धन्यवाद। वास्तव में आपने मुझे – Sowmya

1

का उपयोग कर विधेय संयोजित करना प्रारंभ, मैं तुम्हें इस कोड का उपयोग करने का सुझाव :

var list = list1.AsQueryable(); 
foreach (string str in SearchItems) 
{ 
    list = list.Where(p => p.Name.ToLower().Contains(str.ToLower())); 
} 
listBox1.ItemsSource = list.ToList(); 
+0

यदि मैं इस कोड का उपयोग केवल एक स्ट्रिंग परिणाम देता हूं लेकिन यदि मैं दो स्ट्रिंग्स दर्ज करता हूं तो इसका कोई परिणाम नहीं मिलता है। कृपया समाधान ढूंढें। मुझे इसकी आवश्यकता है। – Sowmya

+0

जो पहले 'टोलर()' के कारण हो सकता है, मैंने अभी जोड़ा है। यदि यह सुनिश्चित न करें कि आपकी 'नाम' संपत्ति में वास्तव में –

+0

के लिए दोनों स्ट्रिंग्स हैं जो एक ही समस्या को फिर से अंतिम स्ट्रिंग परिणाम दे रहे हैं। हाँ मुझे यकीन है कि "नाम" संपत्ति में दोनों स्ट्रिंग्स – Sowmya

2

आपको यहां एक भविष्यवाणी करने की आवश्यकता नहीं है। आप इस तरह की कोशिश कर सकते हैं

List<products> list1 = new List<products>(); 

list1.Add(new products("sowmya")); 
list1.Add(new products("Jane")); 
list1.Add(new products("John")); 
list1.Add(new products("kumar")); 
list1.Add(new products("ramya")); 

string input = "aaa+kuma+ram"; 
List<string> searchStrings = 
    input.Split(new string[] { "+" }, StringSplitOptions.None) 
    .Select(s => s.ToLower()) 
    .ToList(); 

List<products> list2 = (
    from p in list1 
    where searchStrings.Any(s => p.Name.Contains(s)) 
    select p).ToList(); 

सूची 2 में "कुमार" और "राम्या" शामिल होगा।

+0

धन्यवाद और यह काम करेगा और काम करेगा, मुझे पता था कि मुझे केवल भविष्यवाणी का उपयोग करके इसे बनाने की ज़रूरत है, कृपया मुझे – Sowmya

+0

@ सोम्या में मदद करें, फिर आपको एंगांगा के सुझावों का प्रयास करना चाहिए। – Gebb

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

  • कोई संबंधित समस्या नहीं^_^