una saber obtener lista existe elemento con como buscar array c# linq list linq-to-objects exists

saber - obtener elemento de una lista c#



Linq selecciona objetos en la lista donde existe IN(A, B, C) (4)

Pruebe con la función Contains ;

Determina si una secuencia contiene un elemento especificado.

var allowedStatus = new[]{ "A", "B", "C" }; var filteredOrders = orders.Order.Where(o => allowedStatus.Contains(o.StatusCode));

Tengo una lista de orders .
Quiero seleccionar orders basados ​​en un conjunto de estados de orden.

Así que, en esencia, select orders where order.StatusCode in ("A", "B", "C")

// Filter the orders based on the order status var filteredOrders = from order in orders.Order where order.StatusCode.????????("A", "B", "C") select order;

Muchas gracias.


Sus códigos de estado también son una colección, por lo tanto, use Contains :

var allowedStatus = new[]{ "A", "B", "C" }; var filteredOrders = orders.Order.Where(o => allowedStatus.Contains(o.StatusCode));

o en sintaxis de consulta:

var filteredOrders = from order in orders.Order where allowedStatus.Contains(order.StatusCode) select order;


NB: esto es LINQ para los objetos, no estoy 100% seguro de si funciona en LINQ para las entidades, y no tengo tiempo para comprobarlo en este momento. De hecho, no es demasiado difícil traducirlo a x en [A, B, C], pero debes verificarlo por ti mismo.

Entonces, ¿en vez de Contiene como un reemplazo del ???? en tu código puedes usar Cualquiera que sea más LINQ-uish:

// Filter the orders based on the order status var filteredOrders = from order in orders.Order where new[] { "A", "B", "C" }.Any(s => s == order.StatusCode) select order;

Es lo opuesto a lo que sabes por SQL, es por eso que no es tan obvio.

Por supuesto, si prefiere la sintaxis fluida, aquí está:

var filteredOrders = orders.Order.Where(order => new[] {"A", "B", "C"}.Any(s => s == order.StatusCode));

Aquí volvemos a ver una de las sorpresas de LINQ (como Joda-speech, que pone select al final). Sin embargo, es bastante lógico en este sentido que compruebe si al menos uno de los elementos (es decir, alguno ) en una lista (conjunto, colección) coincide con un único valor.


var statuses = new[] { "A", "B", "C" }; var filteredOrders = from order in orders.Order where statuses.Contains(order.StatusCode) select order;