Je suis un peu bloqué sur la requête linq suivante. J'essaie de trouver toutes les commandes qui ont un état autre que «Terminé», ou qui ont été terminées au cours du dernier mois.Aide sur la logique OU dans Linq lambda query
_ordersRepository.GetAllByFilter(
o => o.OrderStatus
.OrderByDescending(os => os.StatusUpdate.Date)
.First()
// so at this point I have found the most recent status,
// and I need to do something like...
/* pseudo code */
WHERE
StatusUpdate.StatusType.Name != "Completed"
OR
StatusUpdate.Date > DateTime.Today.AddMonths(-1)
);
EDIT pour clarifier: La difficulté que je vais avoir est que je n'ai pas un moyen direct pour obtenir l'état actuel comme Order.Status
. Le statut est historiquement conservé dans un tableau StatusUpdate
. Un StatusUpdate
est connecté à un Order
par une table de liens OrderStatus
(un ordre a beaucoup de StatusUpdates). Donc, si vous regardez mon code tentative ci-dessus, vous voyez que je suis DECOUVRIR l'état actuel avec:
Order.OrderStatus.OrderByDescending(os => os.StatusUpdate.Date).First()
Cela me donne un StatusUpdate
correspondant à l'état actuel de la commande. Je dois maintenant vérifier:
StatusUpdate.StatusType.Name == "Completed" // StatusType is like an enum lookup table
OR
StatusUpdate.Date > lastMonth
Je peux presque obtenir comment je pouvais le faire, mais pas sans être horriblement inefficace.
Oui je pense que ce que j'ai besoin, merci. Je ne savais pas à propos de "let". Un seul problème cependant: ma méthode GetAllByFilter sur mon dépôt prend un paramètre lambda. Est-il même possible d'écrire cette requête dans la syntaxe lambda? – fearofawhackplanet