2012-06-20 52 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; 

这就是我没有使用。

相关问题