2011-08-19 13 views
5

Tengo estas dos líneas, que hacen exactamente lo mismo. Pero están escritos de manera diferente. ¿Cuál es la mejor práctica y por qué?¿Cuál es el mejor método para usar LINQ?

firstRecordDate = (DateTime)(from g in context.Datas 
            select g.Time).Min(); 

firstRecordDate = (DateTime)context.Datas.Min(x => x.Time); 
+2

Sospecho que este es un caso de preferencia personal. Personalmente, encuentro el segundo más claro y simple, pero estoy seguro de que otros piensan lo contrario. Estoy seguro de que alguien podrá confirmar si recopilan lo mismo o no. :) – Chris

Respuesta

6

no hay diferencia semántica entre la sintaxis del método y la sintaxis de la consulta . Además, algunas consultas, como las que recuperan el número de elementos que coinciden con una condición especificada, o que recuperan el elemento que tiene el valor máximo en una secuencia fuente, solo se pueden expresar como llamadas a métodos.

http://msdn.microsoft.com/en-us/library/bb397947.aspx

También busque aquí: .NET LINQ query syntax vs method chain

Todo se reduce a lo que usted se sienta cómodo y lo que se encuentra es más fácil de leer.

+0

+1 lectura interesante poco. –

1

El segundo uso lambda expresiones. Me gusta porque es compacto y más fácil de leer (aunque algunos encontrarán el primero más fácil de leer).

Además, la primera es más adecuada si tiene un fondo SQL.

1

Yo diría que vaya con lo que es más legible o comprensible con respecto a su equipo de desarrollo. Regresa dentro de un año más o menos y ve si puedes recordar ese LINQ ... bueno, este LINQ en particular es obviamente simple, así que es discutible :-)

La mejor práctica es también bastante dogmática, no vas a conseguir una respuesta aquí. En este caso, iré por el segundo elemento porque es conciso y personalmente puedo leerlo y comprenderlo más rápido que el primero, aunque solo ligeramente más rápido.

1

Yo personalmente prefiero usar expresiones lambda. Por lo que yo sé, no existe una diferencia real ya que dices que puedes hacer exactamente lo mismo en ambos sentidos. Acordamos que todos usen la lambda, ya que es fácil de leer, seguir y recoger para las personas que no les gusta SQL.

1

No hay absolutamente ninguna diferencia en términos de resultados, asumiendo que realmente se escriben declaraciones equivalentes en cada formato.

Elija la más legible para cualquier consulta. Las consultas complejas con combinaciones y muchas cláusulas donde, etc. son a menudo más fáciles de escribir/leer en la sintaxis de consulta de linq, pero las más simples como context.Employees.SingleOrDefault(e => e.Id == empId) son más fáciles usando la sintaxis de encadenamiento de métodos. No existe una regla general de "uno es mejor", y dos personas pueden tener una diferencia de opinión para cualquier ejemplo dado.

1

No hay diferencia semántica entre las dos instrucciones. Cuál usted elige es puramente una cuestión de preferencia de estilo

1

¿Necesita el molde explícito en cualquiera de ellos? ¿Ya no es Time un DateTime?

Personalmente, prefiero el segundo enfoque, ya que encuentro que la sintaxis del método de extensión es más familiar que la sintaxis LINQ, pero en realidad se trata de preferencias personales, pero realizan el mismo.

El segundo escrito para parecerse más exactamente al primero sería context.Datas.Select(x => x.Time).Min().Para que pueda ver cómo lo escribió con Min(x => x.Time) podría ser un poco más eficiente, porque solo tiene operación en lugar de dos

1

La sintaxis de comprensión de consulta se compila en realidad a una serie de llamadas a los métodos de extensión, lo que significa que las dos sintaxis son semánticamente idénticas. Cualquiera que sea el estilo que prefiera es el que debe usar.

Cuestiones relacionadas