2012-06-20 12 views
6

मैं एक सी # विंडोज 8 मेट्रो ऐप में काम कर रहा हूं और मैं LINQ का उपयोग कर ObservableCollection<T> फ़िल्टर करने का प्रयास कर रहा हूं, जहां एक संपत्ति में कुछ स्ट्रिंग होती है, और मुझे इसकी आवश्यकता होती है कि यह असंवेदनशील हो।LINQ स्ट्रिंग में एक और स्ट्रिंग केस असंवेदनशील

var searchResults = from _rest in App.ViewModel.Restaurants 
        where _rest.Name.IndexOf(queryText, 
           StringComparison.CurrentCultureIgnoreCase) >= 0 
        select _rest; 

मैं दोनों तार में चारों ओर

  • Using string1.Contains(string2).ToUpper() काम करते हैं।
  • Using string1.Contains(string2).ToLower() दोनों तारों में।
  • Using string1.IndexOf(string2, StringComparison.CurrentCultureIgnoreCase) >= 0
  • Using string1.IndexOf(string2, StringComparison.OrdinalIgnoreCase) >= 0
  • Using String.Compare(string1, string2, StringComparison.CurrentCultureIgnoreCase)

लेकिन इस विधि में से कोई भी मेरे लिए असंवेदनशील तरीके से काम नहीं करता है, अगर मैं सही नाम लिखूं तो ठीक काम करता है।

क्या किसी के पास विंडोज 8 में एक ही समस्या है ??

प्रदान की गई किसी भी सहायता के लिए अग्रिम धन्यवाद।

+5

क्या आप समस्या का प्रदर्शन करने वाला एक छोटा लेकिन पूरा उदाहरण दे सकते हैं? –

+1

वे कॉन्टिनेंटल यूरोपीय रेस्तरां नाम नहीं हैं? ;-) – dash

+1

क्या यह वही काम करता है जब आप वही LINQ अभिव्यक्ति लागू करते हैं उदाहरण के लिए एक .NET 4 (.0) WPF अनुप्रयोग? –

उत्तर

0

इस प्रयास करें:

var searchResults = from _rest in App.ViewModel.Restaurants 
         where _rest.Name.IndexOf(queryText, 
            StringComparison.InvariantCultureIgnoreCase) >= 0 
         select _rest; 
+0

स्ट्रिंग कॉम्परिसन। इन्विरिएंट कल्चर इग्नोरकेस मेट्रो ऐप में उपलब्ध नहीं है। – Rotten

+0

यह मेरे लिए काम किया! धन्यवाद दोस्त –

1

लिखें आप ही विस्तार विधि

public static class MetroHelper 
{ 
    public static bool ContainsInvariant(this string mainText, string queryText) 
    { 
     return mainText.ToUpperInvariant().Contains(queryText.ToUpperInvariant()); 
    } 
} 

और आपके आवेदन

var searchResults = from _rest in App.ViewModel.Restaurants 
       where _rest.Name.ContainsInvariant(queryText) 
       select _rest; 

है यही कारण है कि मैं क्या किया में इस्तेमाल करते हैं।

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