J'ai une liste de orders
.
Je souhaite sélectionner orders
en fonction d’un ensemble d’états de commande.
Donc, essentiellement 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;
Vos codes de statut sont aussi une collection, utilisez donc Contains
:
var allowedStatus = new[]{ "A", "B", "C" };
var filteredOrders = orders.Order.Where(o => allowedStatus.Contains(o.StatusCode));
ou en syntaxe de requête:
var filteredOrders = from order in orders.Order
where allowedStatus.Contains(order.StatusCode)
select order;
var statuses = new[] { "A", "B", "C" };
var filteredOrders = from order in orders.Order
where statuses.Contains(order.StatusCode)
select order;
Essayez avec Contains
fonction;
Détermine si une séquence contient un élément spécifié.
var allowedStatus = new[]{ "A", "B", "C" };
var filteredOrders = orders.Order.Where(o => allowedStatus.Contains(o.StatusCode));
NB: Ceci est LINQ aux objets, je ne suis pas sûr à 100% si cela fonctionne dans LINQ aux entités, et je n'ai pas le temps de le vérifier pour le moment. En fait, il n’est pas trop difficile de le traduire en x dans [A, B, C] mais vous devez vérifier vous-même.
Ainsi, au lieu de contient en remplacement de ???? dans votre code, vous pouvez utiliser N'importe quel qui est plus 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;
C'est le contraire de ce que vous savez en SQL, c'est pourquoi ce n'est pas si évident.
Bien sûr, si vous préférez une syntaxe fluide, voici:
var filteredOrders = orders.Order.Where(order => new[] {"A", "B", "C"}.Any(s => s == order.StatusCode));
Nous retrouvons ici l’une des surprises LINQ (comme Joda-speech qui met select à la fin). Cependant, il est assez logique dans ce sens de vérifier si au moins un des éléments (c'est-à-dire any ) d'une liste (ensemble, collection) correspond à une seule valeur.