2009-07-01 16 views

Respuesta

327

LINQ define un método de extensión que es perfecto para la solución de este problema exacto:

using System.Linq; 
... 
    bool has = list.Any(cus => cus.FirstName == "John"); 

asegúrese de hacer referencia a System.Core.dll, que es donde vive LINQ.

+13

Cualquiera es bueno, me pregunto cuántos desarrolladores usan Count cuando deberían usar Any? – RichardOD

+11

También puede hacer una búsqueda insensible a mayúsculas/minúsculas: cus => cus.FirstName.Equals ("John", StringComparison.CurrentCultureIgnoreCase) – jmservera

+1

Sé que esta es una pregunta antigua, pero ¿por qué no utilizamos el método Exists? Ver como está hecho para ver si las cosas existen. – Blackunknown

1
customerList.Any(x=>x.Firstname == "John") 
+0

Esto no responde a la pregunta "si" tal entrada existe; simplemente enumera los valores si existen. Se necesita un paso adicional para determinar si esta enumeración no es nula. – jason

+0

Su linq no es correcto, debe ser: de x en customerList ... – jmservera

+0

Luego cambie Where to Any. Probablemente más filosófico para mí. Rara vez necesito saber si sin importar cuáles son. @jmservera: tenías razón. Renuncie a LINQ hace un tiempo y ahora uso Lambda exclusivamente. –

2
List<Customer> list = ...; 
Customer john = list.SingleOrDefault(customer => customer.Firstname == "John"); 

John será nula si no existe ningún cliente con un primer nombre de "John".

+1

Eso lanzará una excepción si * más de un * cliente se llama John. –

+1

Gracias por el comentario. Dejaré la respuesta como un ejemplo parcialmente correcto. – M4N

+0

Todavía es válido en un escenario cuando está seguro de que hay 1 y desea que se genere una excepción si hay más de uno, por lo que creo que es bueno que no lo haya eliminado. – RichardOD

75

La respuesta de zvolkov es la perfecta para averiguar si existe dicho cliente. Si necesita uso el cliente después, que puede hacer:

Customer customer = list.FirstOrDefault(cus => cus.FirstName == "John"); 
if (customer != null) 
{ 
    // Use customer 
} 

Sé que esto no es lo que pedían, pero yo pensé que iba a adelantarse a una pregunta de seguimiento :) (Por supuesto, esto sólo se encuentra la primera dicho cliente ... para encontrar a todos ellos, sólo tiene que utilizar una cláusula de where normal.)

+7

Me gustaría señalar que es posible que aprecie haber hecho esto más adelante en lo que respecta a la depuración, si de pronto se siente curioso sobre qué cliente era el adecuado. – mquander

+1

Simplemente respondiendo esta pregunta porque me encanta la forma en que la comunidad SO da el paso extra para agregar aún más a la pregunta/respuesta. – barneymc

+1

gracias me ayudó, pero a veces solo quiero obtener el resultado 'bool', entonces en ese caso' .Any' o '.FindIndex' se usa [aquí] (http://stackoverflow.com/a/4937099/2218697) ** que es rápido **? – stom

0

Otra posibilidad

if (list.Count(customer => customer.Firstname == "John") > 0) { 
//bla 
} 
+2

Es preferible usar cualquiera en este escenario. – RichardOD

+0

Sí, no sabía, que Any() termina si se encuentra el elemento ... – Krassi

9

Usando LINQ tiene muchas possibiliti ES, aquí uno sin el uso de lambdas:

//assuming list is a List<Customer> or something queryable... 
var hasJohn = (from customer in list 
     where customer.FirstName == "John" 
     select customer).Any(); 
19

Una opción para el seguimiento de la pregunta (cómo encontrar un cliente que podría tener cualquier número de nombres de pila):

List<string> names = new List<string>{ "John", "Max", "Pete" }; 
bool has = customers.Any(cus => names.Contains(cus.FirstName)); 

o para recuperar el cliente de csv de lista similar

string input = "John,Max,Pete"; 
List<string> names = input.Split(',').ToList(); 
customer = customers.FirstOrDefault(cus => names.Contains(cus.FirstName)); 
3

La técnica i utilizado antes de descubrir .Any():

var hasJohn = (from customer in list 
     where customer.FirstName == "John" 
     select customer).FirstOrDefault() != null; 
2

Pruebe esto, espero que lo ayude.

if (lstCustumers.Any(cus => cus.Firstname == "John")) 
{ 
    //TODO CODE 
} 
+2

Es la misma respuesta aceptada de hace más de 8 años. Por favor, asegúrese de que su respuesta sea única entre todas las respuestas. –

Cuestiones relacionadas