Klauzula Let (odwołanie w C#)let clause (C# Reference)

W wyrażeniu zapytania czasami warto przechowywać wynik wyrażenia podrzędnego w celu użycia go w kolejnych klauzulach.In a query expression, it is sometimes useful to store the result of a sub-expression in order to use it in subsequent clauses. Można to zrobić za pomocą słowa kluczowego let, które tworzy nową zmienną zakresu i inicjuje ją z wynikiem podania wyrażenia.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. Po zainicjowaniu z wartością zmienna zakresu nie może być używana do przechowywania innej wartości.Once initialized with a value, the range variable cannot be used to store another value. Jeśli jednak zmienna zakresu zawiera typ queryable, może to być zapytanie.However, if the range variable holds a queryable type, it can be queried.

PrzykładExample

W poniższym przykładzie let jest używany na dwa sposoby:In the following example let is used in two ways:

  1. Aby utworzyć wyliczalny typ, który może być badany.To create an enumerable type that can itself be queried.

  2. Aby włączyć wywołanie kwerendy ToLower tylko jeden raz w zmiennej zakresu word.To enable the query to call ToLower only one time on the range variable word. Bez korzystania z letnależy wywołać ToLower w każdym predykacie w klauzuli 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
*/

Zobacz takżeSee also