J'ai une énumite appelée Ce que je veux faire est de créer une instruction LINQ qui me dira si l'orderstaus est valide, actif, traité ou terminé. P> À l'heure actuelle, j'ai quelque chose comme: p> qui fonctionne, mais c'est très "Wordy". Existe-t-il un moyen de convertir cela en un orderstatus code>, et contient diverses statuts qu'un ordre peut être dans:
contenant () code> instruction et raccourcissez-le un peu? P> p>
5 Réponses :
Abumnig que l'ENUM est défini dans l'ordre que vous avez spécifié dans la question, vous pouvez raccourcir cela en utilisant une comparaison entière.
var result = Order.Status.Where(x => (int)x >= (int)OrderStatus.Valid & & (int)x <= (int)OrderStatus.Completed);
Bonne réponse pour le moment, mais cela peut devenir plus fragile plus tard. Compréhension que ce code nécessiterait de vérifier l'ENUM de connaître tous les codes qui tombent dans la plage définie et que le développement doit toujours être capable de définir une plage continue contenant exactement les codes souhaités (si une constante expédiée a été placée entre le traitement et achevé que le L'utilisateur ne voulait pas dans leurs résultats, ce code se casse).
@Keiths, oui, j'ai couvert que dans le dernier paragraphe de ma réponse.
Yup, accepté, un peu trop flakeux pour ma demande, mais j'aime vraiment comment vous l'avez fait, car cela rend le code un peu plus flexible. Nous pourrions facilement ajouter un nouveau statut sans casser le code par exemple.
Bien sûr:
var status in Order.Status.Where(status => status.OrderCode.In( OrderStatus.Valid, OrderStatus.Active, OrderStatus.Processed, OrderStatus.Completed));
J'ai utilisé cette extension: Vous pouvez l'utiliser comme condition: p>
+1 pour la méthode d'extension! J'espère le refroidir pour utiliser Linq à l'intérieur aussi.
Oui, j'ai toujours voulu le faire mais j'ai oublié :)
Oui, bonne idée. Je pourrais utiliser quelque chose comme ça aussi, assez cool
Vous pouvez les mettre dans une collection et utiliser:
Si cet ensemble de statuts a une signification, par exemple, ce sont des statuts pour les commandes acceptées, vous pouvez définir une méthode d'extension sur votre enum et utiliser cela dans votre requête LINQ.
public static class OrderStatusExtensions { public static bool IsAccepted(this OrderStatuses status) { return status == OrderStatuses.Valid || status == OrderStatuses.Active || status == OrderStatuses.Processed || status == OrderStatuses.Completed; } } var acceptedOrders = from o in orders where o.Status.IsAccepted() select o;