Avec Entity Framework, est-il préférable d'utiliser .First() ou .(1) pour le “TOP 1”?

Nous sommes la mise en œuvre de certaines EF référentiels de données, et nous avons quelques requêtes qui comprendrait TOP 1

J'ai lu de nombreux postes, ce qui suggère d'utiliser .Take(1)

Le code je suis l'examen utilise .First()

Je comprends que ces deux produisent le même résultat pour l'assignation d'un objet, mais sont-ils à la fois fait résoudre à la même requête? Lorsque la DB est interrogé, il va réellement être avec TOP 1 pour les deux demandes? Ou vont-ils exécuter la requête en plein dans le énumérable, puis il suffit de prendre la première entrée dans la collection?

En outre, si nous avons utilisé .FirstOrDefault() alors pourquoi devrions-nous nous attendre à des comportements différents? Je sais que lors de l'utilisation d'un IEnumerable, appelant .First() sur un vide collection va lancer, mais si ce est en fait seulement la modification de la requête afin d'inclure TOP 1 alors je devrais attendre absolument aucune différence fonctionnelle entre .First() et .FirstOrDefault().... droit?

Sinon, est-il une meilleure méthode que ces Énumérable prolongations pour faire la requête à exécuter TOP 1?

  • Comment transformer votre .Take(1) de la requête dans un objet?
  • Utilisation First() si vous souhaitez qu'un élément. Utilisation Take(1) si vous voulez un seul élément de la séquence.
InformationsquelleAutor Matthew | 2012-05-04