私のリポジトリから、ToList()メソッドを使用して別のListを返します。ToList()メソッド呼び出し時にデータベースを呼び出す
問題は、この返された結果(つまりList型)でさらにLINQを実行すると、これもデータベース呼び出しを生成することです。明らかに、この2番目のlinq calllは純粋なLINQ to Entityであり、データベースは呼び出されません。私がしていることを以下に見てください。
List<User> us = userRepository.GetMany(u => filterStatusIds.Contains(u.UserStatus.Id));
if (!string.IsNullOrEmpty(name))
us = (from u in us
where u.DisplayName.Contains(name)
select u).ToList(); // this ToList should not call database
この追加のデータベースコールを停止するための助けやアイデアはありますか?
なぜデータベースクエリーを再度実行すると思いますか?また、なぜデータベースの代わりにアプリケーションでフィルタを実行するのですか? –
@abatishchev: 'ToList'への最初の呼び出しは、linq-to-objectsに切り替わり、結果が実体化され、式ツリーがなくなるため、戻ってくることはありません。 –
@ラディスラフ:確かに、そうです、最初のコメントを誤解しました。 – abatishchev