【发布时间】:2012-05-07 09:24:47
【问题描述】:
从我的存储库中,我使用 ToList() 方法返回不同的列表。
问题是,当我对这个返回的结果(即 List 类型)运行更多 LINQ 时,它也会为此生成一个数据库调用。显然,这第二个 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 并且没有回头路,因为结果已物化并且表达式树消失了。 -
@Ladislav:当然,你是对的,误读了你最初的评论。
标签: c# linq linq-to-entities entity-framework-4.2