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;