1. ホーム
  2. c#

[解決済み】連鎖したLINQ拡張メソッド呼び出しで「let」キーワードに相当するコード

2022-04-13 09:20:42

質問

C#コンパイラのクエリ理解機能を使うと、次のようなコードを書くことができる。

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; 

上記のクエリ式では let キーワードは、値を where および orderby オペレーションに渡す際に、重複して animalName.Length .

ここで "let"キーワードが行うことを実現する、同等のLINQ拡張メソッド呼び出しのセットは何でしょうか?

どのように解決するのですか?

Letは独自のオペレーションを持たず、Letにおんぶにだっこの状態です。 Select . これは、"reflector" を使って既存のDLLを分解してみるとわかります。

となります。 何か のようなものです。

var result = names
        .Select(animalName => new { nameLength = animalName.Length, animalName})
        .Where(x=>x.nameLength > 3)
        .OrderBy(x=>x.nameLength)
        .Select(x=>x.animalName);