Usando las funciones de comprensión de consultas de los compiladores de C #, puede escribir código como:
var names = new string[] { "Dog", "Cat", "Giraffe", "Monkey", "Tortoise" };
var result =
from animalName in names
let nameLength = animalName.Length
where nameLength > 3
orderby nameLength
select animalName;
En la expresión de consulta anterior, la let
palabra clave permite pasar un valor a las operaciones where y orderby sin duplicar llamadas a animalName.Length
.
¿Cuál es el conjunto equivalente de llamadas al método de extensión LINQ que logra lo que hace aquí la palabra clave "let"?
c#
linq
extension-methods
linq-to-objects
LBushkin
fuente
fuente
Respuestas:
Let no tiene su propia operación; se lleva a cuestas de
Select
. Puede ver esto si usa "reflector" para separar un dll existente.será algo como:
fuente
.Dump()
método de extensión en LinqPad para ver la lambda resultante.Hay un buen artículo aquí.
Básicamente
let
crea una tupla anónima. Es equivalente a:fuente
it seems prudent to recommend against using the let keyword in cases where you do not need to transform a variable
This could be considered a micro-optimisation
También hay un método de extensión .Let en System.Interactive, pero su propósito es introducir una expresión lambda para ser evaluada 'en línea' en una expresión fluida. Por ejemplo, considere (en LinqPad, por ejemplo) la siguiente expresión que crea nuevos números aleatorios cada vez que se ejecuta:
Para ver que cada vez aparecen nuevas muestras aleatorias, considere lo siguiente
que produce pares en los que la izquierda y la derecha son diferentes. Para producir pares en los que la izquierda y la derecha son siempre iguales, haga algo como lo siguiente:
Si pudiéramos invocar expresiones lambda directamente, podríamos escribir
Pero no podemos invocar expresiones lambda como si fueran métodos.
fuente
sobre el Código equivalente a la palabra clave 'let' en las llamadas de método de extensión LINQ encadenadas
el comentario anterior ya no es válido
produce
así que múltiples
let
están optimizados ahorafuente