C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

LINQでの追加whereメソッドが反映されない

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■96104 / inTopicNo.1)  LINQでの追加whereメソッドが反映されない
  
□投稿者/ jolly (1回)-(2020/10/21(Wed) 17:56:55)

分類:[ASP.NET (C#)] 

VS2019+SQLServer2012でLINQの動きが理解できずに困っております。

■サンプルコード
var test =
 from all in db.Test
 select new TestView
 {
  TestId = all.TestId,
  TestName = all.TestName
 };
test = test.Where(n => n.TestName.Contains("あ"));
var test2 = test.ToList();


※「TestView」はビューモデルでTestIdとTestNameを定義しています。


■「db.Test」モデルの中身
TestId  TestName
1     あああああ
2     いいいいい
3     ううううう



このコードで期待しているのは、test2 に「あああああ」の1件が入ることですが、
上記では3件すべてが取得されてしまいます。

下のコードのように、最初の抽出でToList()を行うと1件となります
var test =(
 from all in db.Test
 select new TestView
 {
  TestId = all.TestId,
  TestName = all.TestName
 }).ToList();


こちらのURLやその他記事で解説されている動きと異なっている為、混乱しています。
https://www.buildinsider.net/web/bookaspmvc5/050302

ちなみにToList()を行う直前のtest変数の中身のSQL文をSQLServer上で実行すると正しく1件が抽出されます。

何か情報をお持ちの方いらっしゃいますでしょうか?

※足りない情報がありましたら補足しますのでお知らせください。
引用返信 編集キー/
■96108 / inTopicNo.2)  Re[1]: LINQでの追加whereメソッドが反映されない
□投稿者/ WebSurfer (2137回)-(2020/10/21(Wed) 19:59:06)
No96104 (jolly さん) に返信

実際にクエリが DB に投げられるのが ToList の時点だからでしょう。
引用返信 編集キー/
■96111 / inTopicNo.3)  Re[2]: LINQでの追加whereメソッドが反映されない
□投稿者/ jolly (2回)-(2020/10/22(Thu) 01:21:48)
No96108 (WebSurfer さん) に返信
> 実際にクエリが DB に投げられるのが ToList の時点だからでしょう。

大変失礼いたしました。
確かにToListの時点で投げられる、というのが原因ではあったのですが、
実際のコードとして、

test = test.Where(n => n.TestName.Contains("あ"));

の"あ"に変数を用いていて、条件設定後、ToList前に変数の中身を入れ替えていた為、
ToList時に"あ"にならなかったようです。
パラメータは遅延評価ではない、と勝手に思い込んでました。

お騒がせ致しました。。


解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ