let (Cláusula, Referencia de C#)let clause (C# Reference)

En una expresión de consulta, a veces resulta útil almacenar el resultado de una subexpresión para usarlo en las cláusulas siguientes.In a query expression, it is sometimes useful to store the result of a sub-expression in order to use it in subsequent clauses. Puede hacer esto con la palabra clave let, que crea una variable de rango y la inicializa con el resultado de la expresión que proporcione.You can do this with the let keyword, which creates a new range variable and initializes it with the result of the expression you supply. Una vez inicializada con un valor, la variable de rango no se puede usar para almacenar otro valor.Once initialized with a value, the range variable cannot be used to store another value. En cambio, si la variable de rango contiene un tipo consultable, se puede consultar.However, if the range variable holds a queryable type, it can be queried.

EjemploExample

En el siguiente ejemplo, se usa let de dos maneras:In the following example let is used in two ways:

  1. Para crear un tipo enumerable que se puede consultar.To create an enumerable type that can itself be queried.

  2. Para habilitar la consulta para que llame a ToLower solo una vez en la variable de rango word.To enable the query to call ToLower only one time on the range variable word. Sin usar let, tendría que llamar a ToLower en cada predicado de la cláusula where.Without using let, you would have to call ToLower in each predicate in the where clause.

class LetSample1
{
    static void Main()
    {
        string[] strings = 
        {
            "A penny saved is a penny earned.",
            "The early bird catches the worm.",
            "The pen is mightier than the sword." 
        };

        // Split the sentence into an array of words
        // and select those whose first letter is a vowel.
        var earlyBirdQuery =
            from sentence in strings
            let words = sentence.Split(' ')
            from word in words
            let w = word.ToLower()
            where w[0] == 'a' || w[0] == 'e'
                || w[0] == 'i' || w[0] == 'o'
                || w[0] == 'u'
            select word;

        // Execute the query.
        foreach (var v in earlyBirdQuery)
        {
            Console.WriteLine("\"{0}\" starts with a vowel", v);
        }

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
/* Output:
    "A" starts with a vowel
    "is" starts with a vowel
    "a" starts with a vowel
    "earned." starts with a vowel
    "early" starts with a vowel
    "is" starts with a vowel
*/

Vea tambiénSee also