J'ai une liste de orders
.
Je souhaite effectuer une sélection en orders
fonction d'un ensemble de statuts 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;
Réponses:
Vos codes de statut sont également une collection, alors utilisez
Contains
:ou dans la syntaxe de requête:
la source
la source
NB: il s'agit de LINQ to objects, je ne suis pas sûr à 100% si cela fonctionne en LINQ to entity, 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 par vous-même.
Donc, au lieu de Contient en remplacement de ???? dans votre code, vous pouvez utiliser Any qui est plus LINQ-uish:
C'est le contraire de ce que vous savez de SQL, c'est pourquoi ce n'est pas si évident.
Bien sûr, si vous préférez une syntaxe fluide, voici:
Ici, nous voyons à nouveau l'une des surprises LINQ (comme Joda-speech qui met select à la fin). Cependant, il est assez logique en ce sens qu'il vérifie si au moins un des éléments (c'est-à-dire n'importe lequel ) d'une liste (ensemble, collection) correspond à une seule valeur.
la source
Essayez avec la
Contains
fonction;la source
Faites juste attention,
.Contains()
correspondra à toute sous-chaîne, y compris la chaîne que vous ne vous attendez pas. Pour par exemple.new[] { "A", "B", "AA" }.Contains("A")
vous rendra A et AA dont vous pourriez ne pas vouloir. J'en ai été mordu..Any()
ou.Exists()
est un choix plus sûrla source