15
novembre
2011
Entity Framework 4 + Group By + Include
novembre
2011
Un article de benji_dv
Pas de commentaires
Imaginons la requête EF suivante :
ctx.ContextOptions.LazyLoadingEnabled = false;
var cmds =
ctx.Commande
.Include(« DetailCommande »)
.Where(cmd=>…filtre…)
.GroupBy(cmd=>cmd.date)
.OrderBy(cmd=>cmd.Key)
.FirstOrDefault();
Cette requête va me retourner la première commande par jour en fonction d’un filtre.
Qu’importe l’intérêt fonctionnel (certainement débile :p ), centrons nous sur le résultat :
L’include est royalement nié : aucun détail de commande n’est présent dans les éléments retournés, malgré la clause Include.
Une solution possible (mais il y en a d’autres) :
-
Retourner les ids de commande concernés :
var ids =
ctx.Commande
.Where(cmd => …filtre…)
.GroupBy(cmd => cmd.date)
.OrderBy(cmd => cmd.Key)
.FirstOrDefault().Select(cmd => cmd.Id); -
Récupérer les commandes avec l’include :
var cmds =
ctx.Commande
.Include(« DetailCommande »)
.Where(cmd => ids.Contains(cmd.Id)).ToList();PS : le ToList est là pour forcer l’exécution (vu que le LazyLoading est à false)