2012-06-20 53 views
6

我正在C#Windows 8 Metro應用程序中工作,我試圖過濾使用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)

但是這種方法沒有一種以不區分大小寫的方式適用於我,如果我正確寫入名稱,那麼工作正常。

有人在Windows 8中有相同的問題?

在此先感謝您提供的任何幫助。

+5

你能舉一個簡短但完整的例子來說明問題嗎? –

+1

他們不是歐式餐廳的名字嗎? ;-) – dash

+1

如果您在例如.NET 4(.0)WPF應用程序中應用相同的LINQ表達式,它是否按照您希望的方式工作? –

回答

0

試試這個:

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

StringComparison.InvariantCultureIgnoreCase在Metro應用程序中不可用。 – 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; 

這就是我沒有使用。

相關問題