LINQ es una de las mayores mejoras a .NET desde los genéricos y me ahorra toneladas de tiempo y líneas de código. Sin embargo, la sintaxis fluida parece ser mucho más natural para mí que la sintaxis de expresión de consulta.
var title = entries.Where(e => e.Approved)
.OrderBy(e => e.Rating).Select(e => e.Title)
.FirstOrDefault();
var query = (from e in entries
where e.Approved
orderby e.Rating
select e.Title).FirstOrDefault();
¿Hay alguna diferencia entre los dos o hay algún beneficio particular de uno sobre otro?
Respuestas:
Ninguno de los dos es mejor: atienden diferentes necesidades. La sintaxis de la consulta tiene su propio significado cuando desea aprovechar múltiples variables de rango . Esto sucede en tres situaciones:
Aquí hay un ejemplo (de las muestras de LINQPad):
Ahora compare esto con lo mismo en la sintaxis del método:
La sintaxis del método, por otro lado, expone la gama completa de operadores de consulta y es más concisa con consultas simples. Puede obtener lo mejor de ambos mundos combinando la sintaxis de consulta y método. Esto a menudo se realiza en consultas LINQ to SQL:
fuente
Prefiero usar este último (a veces llamado "sintaxis de comprensión de consultas") cuando puedo escribir la expresión completa de esa manera.
Tan pronto como tengo que agregar (paréntesis) y
.MethodCalls()
, cambio.Cuando uso el primero, generalmente pongo una cláusula por línea, como esta:
Me parece un poco más fácil de leer.
fuente
Cada estilo tiene sus pros y sus contras. La sintaxis de consulta es más agradable cuando se trata de uniones y tiene la útil palabra clave let que facilita la creación de variables temporales dentro de una consulta.
La sintaxis fluida, por otro lado, tiene muchos más métodos y operaciones que no están expuestos a través de la sintaxis de consulta. Además, dado que son solo métodos de extensión, puede escribir los suyos.
He descubierto que cada vez que comienzo a escribir una declaración LINQ usando la sintaxis de consulta, termino teniendo que ponerla entre paréntesis y recurrir al uso de métodos de extensión LINQ fluidos. La sintaxis de consulta simplemente no tiene suficientes características para usar por sí misma.
fuente
En VB.NET, prefiero la sintaxis de consulta.
Odio repetir la fea
Function
palabra clave:Esta consulta ordenada es mucho más legible y mantenible en mi opinión:
La sintaxis de consulta de VB.NET también es más potente y menos detallada que en C #: https://stackoverflow.com/a/6515130/284240
Por ejemplo, esta consulta LINQ to DataSet (Objetos)
VB.NET:
C#:
fuente
No obtengo la sintaxis de consulta en absoluto. Simplemente no hay razón para ello en mi mente. let se puede lograr con .Select y tipos anónimos. Simplemente creo que las cosas se ven mucho más organizadas con la "puntuación" allí.
fuente
La interfaz fluida si solo hay un lugar. Si necesito una selección o un pedido, generalmente uso la sintaxis de consulta.
fuente
La sintaxis fluida parece más poderosa, también debería funcionar mejor para organizar el código en pequeños métodos reutilizables.
fuente
Sé que esta pregunta está etiquetada con C #, pero la sintaxis fluida es dolorosamente detallada con VB.NET.
fuente
Realmente me gusta la sintaxis Fluent y trato de usarla donde puedo, pero en ciertos casos, por ejemplo, donde uso combinaciones, generalmente prefiero la sintaxis de Consulta, en esos casos me resulta más fácil de leer, y creo que algunas personas son más familiares para la sintaxis de consultas (tipo SQL) que las lambdas.
fuente
Si bien entiendo y me gusta el formato fluido, me he quedado en Query por el momento por razones de legibilidad. Las personas que acaban de ser introducidas en LINQ encontrarán la consulta mucho más cómoda de leer.
fuente
Prefiero la sintaxis de consulta ya que provengo de la programación web tradicional que usa SQL. Es mucho más fácil para mí entenderlo. Sin embargo, creo que comenzaré a utilizar .Where (lambda) ya que definitivamente es mucho más corto.
fuente
He estado usando Linq durante aproximadamente 6 meses. Cuando comencé a usarlo, preferí la sintaxis de consulta, ya que es muy similar a T-SQL.
Sin embargo, poco a poco me voy acercando al primero, ya que es fácil escribir fragmentos de código reutilizables como métodos de extensión y simplemente encadenarlos. Aunque encuentro que poner cada cláusula en su propia línea ayuda mucho con la legibilidad.
fuente
Acabo de establecer los estándares de nuestra empresa y aplicamos el uso de los métodos de Extensión. Creo que es una buena idea elegir uno sobre el otro y no mezclarlos en el código. Los métodos de extensión se leen más como el otro código.
La sintaxis de comprensión no tiene todos los operadores y usa paréntesis alrededor de la consulta y agrega métodos de extensión después de todo, solo me ruega que use métodos de extensión desde el principio.
Pero en su mayor parte es solo preferencia personal con algunas excepciones.
fuente