2012-06-20 11 views
6

Estoy trabajando en una aplicación C# Windows 8 Metro y estoy tratando de filtrar un ObservableCollection<T> usando LINQ donde una propiedad contiene alguna cadena, y necesito que no distinga entre mayúsculas y minúsculas.cadena LINQ contiene otra cadena insensible a mayúsculas/minúsculas

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

que evitar

  • Using string1.Contains(string2).ToUpper() en ambas cadenas.
  • Using string1.Contains(string2).ToLower() en ambas cadenas.
  • Using string1.IndexOf(string2, StringComparison.CurrentCultureIgnoreCase) >= 0.
  • Using string1.IndexOf(string2, StringComparison.OrdinalIgnoreCase) >= 0.
  • Using String.Compare(string1, string2, StringComparison.CurrentCultureIgnoreCase).

Pero ninguno de estos métodos funciona para mí de una manera insensible, funciona bien si escribo el nombre correctamente.

¿Alguien tiene el mismo problema en Windows 8?

Gracias de antemano por cualquier ayuda brindada.

+5

¿Puede dar un ejemplo breve pero completo que demuestre el problema? –

+1

No son nombres de restaurantes europeos continentales, ¿o sí? ;-) – dash

+1

¿Funciona como lo desea si aplica la misma expresión LINQ, por ejemplo, en una aplicación .NET 4 (.0) WPF? –

Respuesta

0

probar esto:

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

StringComparison.InvariantCultureIgnoreCase no está disponible en Metro Apps. – Rotten

+0

funcionó para mí! Gracias amigo –

1

escriba posee Método de extensión

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

y utilizar en su aplicación

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

Eso es lo que hice.

Cuestiones relacionadas