0
votes

LINQ à SQL, comment obtenir un élément unique sans exécuter la requête?

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> xxx pré>

et je veux chercher un seul nom qui correspond à un critère spécifique. Disons que je crée le modèle donné: p> xxx pré>

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();


1 commentaires

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?


3 Réponses :


0
votes

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();


2 commentaires

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.



0
votes

Je pense que cela est plus rapide que le vôtre: xxx


0 commentaires

0
votes

Sachant que je n'aurais un résultat que de mes noms, je peux simplement rejoindre le résultat iEnumérable comme suit: xxx

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


1 commentaires

Il exécute toujours où () et sélectionnez () . Qui n'est en réalité aucune amélioration.