2012-06-20 16 views
6

私はC#Windows 8 Metroアプリケーションで作業していますが、LINQを使用してをフィルタリングしようとしています。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 Appsでは使用できません。 – 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; 

に使用します。

関連する問題