【发布时间】:2014-07-10 12:18:28
【问题描述】:
我认为我认为应该做同样事情的两段代码有点奇怪。谁能解释为什么这段代码需要很长时间才能执行:
IEnumerable<Account> acc_list = null;
acc_list = dbContext.Accounts;
acc_list = acc_list.Where(a => !a.Transactions.Any(t => t.isClosureTransaction));
int count = acc_list.Count();
虽然这段代码是即时的:
IEnumerable<Account> acc_list = null;
acc_list = dbContext.Accounts.Where(a => !a.Transactions.Any(t => t.isClosureTransaction));
int count = acc_list.Count();
在使用 sql profiler 进行一些调查后,第二段代码在一个 sql 中执行,而第一段代码为每个帐户的每个事务执行多个查询。
【问题讨论】:
-
跟
IEnumerable<Account>的使用有关系吗?当您尝试改用IQueryable<Account>时会发生什么? -
使用 IQueryable 确实可以解决问题。我仍然认为 IEnumerable 不会像这里那样工作,但我想我还得做更多的阅读。
标签: sql .net linq entity-framework