集合に対して繰り返し処理を行うときは取得したデータに対して行う...のがいいかも

何を当たり前のことを言っているといわれそうですが。(汗
こんな場合どんな結果を期待しますか?

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) などにロードしておくと良いかもしれません。

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

この場合データベースへのアクセスは query.ToList() の一度のみです。
ただし、users と関連のある PostAddress テーブルのデータは読み込まれていないので再度 query を発行するか、前回紹介した LoadOption 指定して ToList() 時に一緒に読み込ませておく必要があります。