Comment commander un enfant collections d'entités en EF
J'ai la requête suivante:
public IEnumerable<Team> GetAllTeamsWithMembers(int ownerUserId)
{
return _ctx.Teams
.Include(x => x.TeamMembers)
.Where(x => x.UserId == ownerUserId)
.OrderBy(x => x.Name).ToList();
}
Comment puis-je commander les équipes par leur nom, et alors tous les enfants des membres de chaque équipe triés par leur nom?
Il semble que ce faire j'ai besoin de créer un nouveau DTO de la classe et de l'utilisation d'un select. J'aimerais utiliser l'EF entités déjà créé, dans ce cas, l'Équipe a une propriété de navigation pour les Membres. Je retourne IEnumerable<Team>
de mon dépôt de la couche.
Il ne semble pas être une belle façon d'ordonner à l'enfant collections dans les EF. Quelqu'un peut-il aider?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez charger les données et de les trier en mémoire après le chargement.
Ou vous pouvez utiliser les Projections et utiliser le Suivi des modifications de EF pour trier votre collection. Voici un exemple de filtrage Comprennent un mais les mêmes travaux pour la Commande.
Vous pourriez faire un dump de votre équipes et de leurs membres de l'équipe dans un type anonyme (probablement pas ce que vous voulez), comme ceci:
Vous pouvez ensuite parcourir en boucle:
Mise à jour: Pour l'enregistrement, mon avis est de ne pas utiliser cette solution, mais pour trier chaque collection dans une boucle ou lors du rendu/de liaison.
J'ai enlevé la 2ème solution, car il a été souligné que les EF ne peut pas sélectionner dans d'autres entités.
Malheureusement désireux de chargement (
Include
) ne prend en charge aucun de filtrage ou de tri de l'enfant chargé des collections.Mais comme indiqué dans l'acceptation de réponse, vous pouvez trier chaque collection après qu'ils ont été désireux chargé. J'ai écrit une méthode d'extension qui gère le tri d'un ensemble par un enfant de la propriété facilement en place donc il n'est pas nécessaire pour la réaffectation:
Ensuite le tri de l'enfant collections pourrait être succinctement écrit comme: