1. ホーム
  2. c#

[解決済み] linqのletキーワードはintoキーワードより優れているか?

2023-05-08 14:56:26

質問

私は現在LINQを勉強しているのですが、LINQで使用されるメソッドである letinto というキーワードがあります。これまでのところ let キーワードの方が into キーワードの方が良いようです。

into キーワードは本質的に、投影の後にクエリを継続することを可能にします。(ただ、グループ結合のためのものを指しているのではないことを明確に述べたいと思います。)

名前の配列が与えられると、次のことができるようになります。

var intoQuery =
  from n in names
  select Regex.Replace(n, "[aeiou]", "")
  into noVowel
  where noVowel.Length > 2
  select noVowel;

これは、selectの結果を受け取り、それを noVowel 変数に入れ、そこからさらに where , orderby そして select 節があります。一度 noVowel 変数が作成されると n 変数は使用できなくなります。

let キーワードは、一方ではtemp匿名型を使用し、一度に複数の変数を再利用できるようにします。

以下のようなことができます。

var letQuery =
  from n in names
  let noVowel = Regex.Replace(n, "[aeiou]", "")
  where noVowel.Length > 2
  select noVowel;

という両方の noVoweln という変数が使えるようになります(今回は使っていませんが)。

違いはわかるものの、なぜ into キーワードよりも let キーワードを使うようになりました。

では、両方のキーワードが存在する正当な理由はあるのでしょうか?

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

はい、おっしゃるとおり、それぞれ違うことをやっているからです。

select ... into は、1つのクエリ全体を効果的に分離し、それを新しいクエリの入力として使用できるようにします。個人的に私は 通常 2 つの変数を使用してこれを行うことを好みます。

var tmp = from n in names
          select Regex.Replace(n, "[aeiou]", "");

var noVowels = from noVowel in tmp
               where noVowel.Length > 2
               select noVowel;

(確かにこの場合、私なら2行でドット記法でやりますが、それは無視して...)

多くの場合、あなたは を必要としないことがよくあります。 を必要としないことがよくあります。 select ... into を使うか、上の例のようにクエリを二つに分割します。これは、クエリの前の部分を使うべきでないときに使えないということだけでなく、起こっていることを単純化するということでもあります。

一方 を実行します。 は残りの文脈を維持したい。 let の方がより理にかなっています。