Je suis tombé sur une question d'optimisation et peut-être qu'il y a un moyen autour de cela.
considère que j'ai l'entité suivante: p> et je veux chercher un seul nom qui correspond à un critère spécifique.
Disons que je crée le modèle donné: p> maintenant, je veux récupérer les informations du modèle EntityView dans une seule requête.
C'est comme ça que je le fais jusqu'à présent: p> var result = db.EntityOnes
.Include(a => a.Names)
.Select(a => new EntityView
{
Id = a.Id,
Name = a.Names.Where(b => b.Criteria == Criteria).Select(b => b.Name).FirstOrDefault()
}).ToList();
3 Réponses :
Vous pouvez ignorer où () code> et
select () code> à l'intérieur de la requête.
var result = db.EntityOnes
.Include(a => a.Names)
.Select(a => new EntityView
{
Id = a.Id,
SingleName = a.Names.FirstOrDefault(b => b.Criteria == Criteria)?.Name
}).ToList();
C'est certainement une amélioration, mais il exécute toujours une requête par entitéone au lieu d'exécuter une seule requête pour tous
Je ne pense pas que ce soit possible.
Je pense que cela est plus rapide que le vôtre:
Sachant que je n'aurais un résultat que de mes noms, je peux simplement rejoindre le résultat iEnumérable comme suit: de cette façon, je voudrais obtenir une seule chaîne de mon requête et exécuter un appel unique à la base de données p> p>
Il exécute toujours où () code> et
sélectionnez () code>. Qui n'est en réalité aucune amélioration.
Les optimisations nécessitent un contexte concret. LINQTOSQL et cadre d'entité sont deux cadres totalement différents. En outre, l'entité cadre a deux implémentations totalement différentes - EF6 et EF Core. La traduction / l'exécution de la requête Core EF varie également entre différentes versions. Alors, laissez-vous commencer par: quel cadre exact utilisez-vous? Et quelle version exacte?