Linq内での変数に関して
解決したいこと
c#初心者です。
Winformsのユーザーコントロールを自作しています。
コントロールにはテキストボックスがあり、入力された値に対して
親のフォームで生成されたDataTableからLinqでデータを抽出するような機能を
作成しました。
その際に、Whereの条件をテキストボックスの値を直接指定すると極端に
動作が遅くなりました。
そこで、テキストボックスの値を一度変数に代入して、Whereの条件に変数を
用いたらすぐに結果が反映されました。
テキストボックスの値を直接指定する方法と一度変数に代入する方法で
なぜ動作が極端に変わるのでしょうか?
開発環境
Windows 11
.NET Framework4.8
Visual Studio 2022 Version 17.7.6
Windows フォームアプリケーションを作成中
該当するソースコード
// テキストボックスのプロパティを用いたパターン
// 1万件程度のDataTableで約30秒の処理時間
var result = _dataSet.Tables["Naiji"].AsEnumerable()
.Where(s => s[0].ToString() == TextBox.Text);
.Where(s => s[1].ToString() == TextBox2.Text);
// 変数を用いたパターン
// 1万件程度のDataTableで約1秒の処理時間
var hensu = TextBox.Text
var hensu2 = TextBox2.Text
var result = _dataSet.Tables["Naiji"].AsEnumerable()
.Where(s => s[0].ToString() == $"{hensu}");
.Where(s => s[1].ToString() == $"{hensu2}");