集合に対して繰り返し処理を行うときは取得したデータに対して行う...のがいいかも
何を当たり前のことを言っているといわれそうですが。(汗
こんな場合どんな結果を期待しますか?
Using db = New こみゅぷらすDataContext()Dim query = From u in db.User _
Where u.Age > 30 _
Select u
For Each u In query
何かの処理(query.Count()) ' 1
Next
編集処理(query)
For Each u In query
何かの処理(query.Count()) ' 2
Next
End Using
"何かの処理 1" と "何かの処理 2" 列挙された query の内容はその時にデータベースから返された結果セットです。
もし同じ結果が返ってくるものと期待したり、最初に取得した結果を編集したデータとして処理を進めるとおかしな結果になります。
さらに引数に Count を渡していますがこの数も query.Count()メソッド を発行した時の値であって、現在列挙中のセットの Count ではありません。
また、データベースクエリが2度発行されている事にも気をつけなければいけません。
こんな場合、必要なデータを一度 List(Of User) などにロードしておくと良いかもしれません。
この場合データベースへのアクセスは query.ToList() の一度のみです。Using db = New こみゅぷらすDataContext()
Dim query = From u in db.User _
Where u.Age > 30 _
Select u
Dim users = query.ToList();
Dim count = users.Count;
For Each u In users
何かの処理(count) ' 1
Next
編集処理(users)
For Each u In users
何かの処理(count) ' 2
Next
End Using
ただし、users と関連のある PostAddress テーブルのデータは読み込まれていないので再度 query を発行するか、前回紹介した LoadOption 指定して ToList() 時に一緒に読み込ませておく必要があります。