let 句 (C# リファレンス)let clause (C# Reference)

クエリ式では、後続の句で使用するために、サブ式の結果を保存すると便利な場合があります。In a query expression, it is sometimes useful to store the result of a sub-expression in order to use it in subsequent clauses. let キーワードを使用してこれを行うことができます。これにより新しい範囲変数を作成し、指定した式の結果でそれを初期化します。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. 値で初期化されると、範囲変数を使用して別の値を格納することはできません。Once initialized with a value, the range variable cannot be used to store another value. ただし、範囲変数がクエリ可能型を保持している場合、クエリを実行できます。However, if the range variable holds a queryable type, it can be queried.

Example

次の例で、let は 2 つの方法で使用されます。In the following example let is used in two ways:

  1. それ自体を照会できる列挙可能な型を作成します。To create an enumerable type that can itself be queried.

  2. クエリが値変数 word に対して ToLower を 1 回のみ呼び出すことができるようにします。To enable the query to call ToLower only one time on the range variable word. let を使用しない場合、where 句の各述語内で、ToLower を呼び出す必要があります。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
*/

関連項目See also