2012-06-20 10 views
6

Sto lavorando in un'app di Windows 8 Metro C# e sto tentando di filtrare uno utilizzando LINQ in cui una proprietà contiene una stringa, e ho bisogno che sia insensibile alla distinzione tra maiuscole e minuscole.La stringa LINQ contiene un'altra stringa senza distinzione tra maiuscole

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

ho aggirare

  • Using string1.Contains(string2).ToUpper() in entrambe le stringhe.
  • Using string1.Contains(string2).ToLower() in entrambe le stringhe.
  • Using string1.IndexOf(string2, StringComparison.CurrentCultureIgnoreCase) >= 0.
  • Using string1.IndexOf(string2, StringComparison.OrdinalIgnoreCase) >= 0.
  • Using String.Compare(string1, string2, StringComparison.CurrentCultureIgnoreCase).

Ma nessuno di questi metodi funziona per me in modo insensibile al caso, funziona bene se scrivo il nome correttamente.

Qualcuno ha lo stesso problema in Windows 8 ??

Grazie in anticipo per qualsiasi aiuto fornito.

+5

Puoi fornire un esempio breve ma completo che dimostri il problema? –

+1

Non sono nomi di ristoranti dell'Europa continentale? ;-) – dash

+1

Funziona come vuoi se applichi la stessa espressione LINQ in un'applicazione .NET 4 (.0) WPF? –

risposta

0

provare questo:

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

StringComparison.InvariantCultureIgnoreCase non è disponibile nelle app Metro. – Rotten

+0

ha funzionato per me! Grazie amico –

1

scrivere la propria Metodo di estensione

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

e utilizzare nella propria applicazione

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

Questo è quello che ho fatto.

Problemi correlati