je la requête suivante:Linq2Sql: optimisation des requêtes
liste Obtenir des ids de l'équipe requis de DB:
IList<int> teamIds = (from sector in DbContext.sectors where sector.Type=typeValue group sector by sector.TeamId into teamSectors select teamSectors.Key ).ToList();
En utilisant cette liste chercher tous les secteurs pour les équipes nécessaires:
IList<InfrStadSector> sectorsForAllTeams = (from sector in DbContext.sectors where teamIds.Contains(sector.TeamId) select sector ).ToList();
Créer une liste de Stades selon les secteurs:
IList<InftStadium> stadiums = new List<InfrStadium>(); foreach(int teamId in teamIds) { IList<InfrStadSector> teamSectors = sectorsForAllTeams.Where(sect=>sect.TeamId==teamIds).ToList(); stadiums.Add(new InfrStadium(teamId, teamSectors); }
Ce qui me préoccupe est que la collecte a reçu de DB je dois demander Où/ToList sur le côté client une fois par chaque équipe
Est-il possible d'optimiser cela?
Merci.
P.S. Potentiellement, je pourrais trier les éléments sur le serveur (en utilisant l'index), puis trier les teamIds et travailler avec la collection des secteurs sans vraiment «interroger» la collection ... mais il y a probablement une meilleure façon d'optimiser cela?
Si j'applique 'ToList()' à teamSectors, l'erreur suivante s'affiche: Appel de méthode interrogeable attendu. Vous avez 'teamSectors.ToList()'. Nom du paramètre: info. Tenter d'appeler 'AsQueryable()' est décrit ici: http://stackoverflow.com/questions/4697982/linq2sql-query-subquery-optimisation – Budda
Oui, vous avez probablement besoin de faire cela une fois qu'ils sont convertis en objets. Je mettrai à jour la réponse pour refléter celle que j'ai donnée pour votre autre question. – tvanfosson
Oui, je suis allé par ici. Bien que cette réponse n'ait pas été réellement testée, il semble que cela devrait fonctionner. Merci. – Budda