Estamos poniendo en práctica algunos repositorios de datos EF, y tenemos algunas consultas que incluirían TOP 1
Con Entity Framework, ¿es mejor usar .First() o .Take (1) para "TOP 1"?
He leído muchos mensajes que sugieren utilizar .Take(1)
El código que estoy revisando usos .First()
entiendo que ambos producen el mismo resultado para la asignación de objetos, pero ¿ambos resuelven la misma consulta? Cuando se consulta el DB, ¿será realmente con TOP 1
para ambas solicitudes? ¿O ejecutarán la consulta en su totalidad en el enumerable, y luego simplemente tomarán la primera entrada en la colección?
Además, si usamos .FirstOrDefault()
entonces ¿por qué deberíamos esperar un comportamiento diferente? Sé que cuando uso un IEnumerable, lanzaré .First()
en una colección vacía, pero si este es en realidad solo cambiando la consulta para incluir TOP 1
entonces no debería esperar ninguna diferencia funcional entre .First()
y .FirstOrDefault()
.... ¿verdad?
Alternativamente, ¿hay algún método mejor que estas extensiones enumerables para hacer que la consulta ejecute TOP 1
?
¿Cómo se convierte la consulta '.Take (1)' en un objeto? – Gabe
Use 'First()' si quiere un artículo. Use 'Take (1)' si desea una secuencia de un solo elemento. –