2012-01-27 47 views
17

Tengo un List<string> que tiene algunas cosas como esta:Comprobar si una cadena dentro de una lista contiene una cadena específica con LINQ

{"Pre Mdd LH", "Post Mdd LH", "Pre Mdd LL", "Post Mdd LL"} 

Ahora quiero llevar a cabo una condición que comprueba si un elemento de la lista contiene una cadena específica. algo así como:

IF list contains an item that contains this_string

para que sea sencillo Quiero ver de una sola vez si la lista de por lo menos! contiene, por ejemplo, un elemento que tiene Mdd LH en él.

quiero decir algo como:

if(myList.Contains(str => str.Contains("Mdd LH)) 
{ 
    //Do stuff 
} 

Gracias.

Respuesta

54

Creo que quieres Any:

if (myList.Any(str => str.Contains("Mdd LH"))) 

Vale la pena familiarizarse con el LINQ standard query operators; Usualmente los usaría en lugar de métodos específicos de implementación (como List<T>.ConvertAll) a menos que realmente me molestara el rendimiento de un operador específico. (Los métodos específicos de la implementación a veces puede ser más eficiente si se conoce el tamaño del resultado etc.)

+0

¿Cómo podemos hacerlo búsqueda que ignore? Contiene no tiene ese método de sobrecarga. –

+0

@ Ankur-m: puede usar 'IndexOf' en su lugar, pasando un 'StringComparison'. Si eso no es suficiente detalle, por favor haga una nueva pregunta (después de buscar las existentes, por supuesto). –

+0

Podría hacerlo usando IndexOf. Sin embargo, tuve que usar FindIndex en lugar de Any. Todavía estoy buscando por qué Any no funcionó. Y sí, hay publicaciones similares que no pude encontrar en mi primera búsqueda. ¡Muchas gracias por la ayuda! –

12

thast debería ser bastante fácil

if(myList.Any(s => s.Contains(stringToCheck))){ 
    //do your stuff here 
} 
4

Prueba esto:

bool matchFound = myList.Any(s => s.Contains("Mdd LH")); 

El Any() se stop searching el momento en que encuentra una coincidencia, por lo que es bastante eficiente para esta tarea.

6

LINQ Cualquier() haría el trabajo:

bool contains = myList.Any(s => s.Contains(pattern)); 

Any(), MSDN:

Determina si cualquier elemento de una secuencia satisface una condición

1

Si yoou uso contiene, se podría obtener falsos positivos. Supongamos que tiene una cadena que contiene dicho texto: "Mis datos de texto Mdd LH" Usando el método Contiene, este método devolverá verdadero para la llamada. El enfoque se iguala el uso del operador:

bool exists = myStringList.Any(c=>c == "Mdd LH")

+0

Eso es exactamente lo que el cartel intentaba lograr, un 'me gusta' en sql , así que estos serían 'positivos positivos', supongo, no iguales necesarios. –

Cuestiones relacionadas