c# - tutorial - linq expression
¿Es Linq o Lambda? (2)
Ambos son Linq. El segundo está usando lambdas .
Lambdas son los métodos de tipo en línea que está pasando como un parámetro a la función Where en el segundo ejemplo.
La diferencia entre esas dos sintaxis es puramente sintáctica. El segundo estilo de linq que usa llamadas de método es cómo funciona debajo del capó. El primero está destinado a ser más amigable / fácil de usar y el compilador lo convierte en llamadas de método detrás de escena. Deberían funcionar de la misma manera para cualquier consulta dada, aunque, por supuesto, el compilador puede elegir una interpretación levemente diferente de una consulta complicada de linq que la que haría al convertir al estilo de método.
Este artículo msdn también puede ser de interés: LINQ Query Syntax versus Method Syntax . De especial relevancia es: "En general, recomendamos la sintaxis de consulta porque generalmente es más simple y más legible, sin embargo, no hay una diferencia semántica entre la sintaxis del método y la sintaxis de la consulta".
Sé que esto es Linq:
var _Results = from item in _List
where item.Value == 1
select item;
Y sé que esto es Lambda:
var _Results = _List.Where(x => x.Value == 1);
Nota del editor: lo anterior no es meramente Lambda, sino que Linq utiliza la "sintaxis de método" cuyo predicado es un lambda. Para que quede claro, las dos muestras anteriores son Linq (mi publicación original era incorrecta, pero dejé el error para ilustrar la confusión que provocó la pregunta).
Pero, ¿es Linq un subconjunto de Lambda o qué?
¿Por qué hay dos técnicos aparentemente idénticos?
¿Hay alguna razón técnica para elegir uno sobre el otro?
Esto es LINQ (usando sintaxis de consulta):
var _Results = from item in _List
where item.Value == 1
select item;
Esto también es LINQ (usando la sintaxis del método):
var _Results = _List.Where(x => x.Value == 1);
Es interesante notar que ambos sabores terminarán produciendo exactamente el mismo código. El compilador le ofrece un servicio al permitirle expresar sus deseos de la manera que prefiera.
Y esta es una lambda:
x => x.Value == 1
Cuando elige usar la sintaxis del método, LINQ casi siempre se ve alrededor de las expresiones lambda. Pero LINQ y lambdas son dos cosas totalmente diferentes, las cuales pueden usarse por sí mismas.
Actualización: Como correctamente señala svick, LINQ con sintaxis de consulta también se implementa usando expresiones lambda (como se mencionó anteriormente, el compilador le permite escribir en la sintaxis de la consulta, pero efectivamente lo transforma en sintaxis de método a sus espaldas). Esto simplemente está acumulando el hecho de que ambos sabores son totalmente equivalentes y se comportarán de la misma manera (por ejemplo, las expresiones lambda pueden provocar la creación de closures ).