LINQ字符串包含另一个不区分大小写的字符串

时间:2012-06-20 12:37:58

标签: c# linq windows-8 linq-to-objects

我正在使用C#Windows 8 Metro应用程序,我正在尝试使用LINQ过滤ObservableCollection<T>,其中属性包含一些字符串,我需要它不区分大小写。

 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中遇到同样的问题吗?

提前感谢您提供的任何帮助。

2 个答案:

答案 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;

这就是我所做的。

答案 1 :(得分:0)

试试这个:

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