[解決済み] linqのletキーワードはintoキーワードより優れているか?
質問
私は現在LINQを勉強しているのですが、LINQで使用されるメソッドである
let
と
into
というキーワードがあります。これまでのところ
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;
という両方の
noVowel
と
n
という変数が使えるようになります(今回は使っていませんが)。
違いはわかるものの、なぜ
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
の方がより理にかなっています。
関連
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み】スクリプトクラスが見つからないので、スクリプトコンポーネントを追加できない?
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。
-
[解決済み] スイッチオンタイプ」これ以上の代案はないのでしょうか?
-
[解決済み】連鎖したLINQ拡張メソッド呼び出しで「let」キーワードに相当するコード
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】スクリプトクラスが見つからないので、スクリプトコンポーネントを追加できない?
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】"The ConnectionString property has not been initialized "を修正する方法
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】「...は'型'であり、与えられたコンテキストでは有効ではありません」を解決するにはどうすればよいですか?(C#)
-
[解決済み】Moqを使用してメソッド呼び出しを検証する
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで