LINQ是否在内存中执行后续选择?

时间:2013-06-03 21:04:59

标签: .net linq

如果我使用LINQ从数据库中获取一些数据,然后我会获取该数据并开始在其上执行新的LINQ命令,它是否会返回到数据库?或者只是在记忆中做到这一点?只谈论阅读数据。

所以,如果我这样做:

var tabledata = dbContext.Table1.Where(u => u.isActive);
int count = tabledata.Count();

然后我想快速得到一个特定的值,所以我这样做:

string username = tabledata.Where(u => u.ID == 1).Select(u => u.Username).Single();

我刚刚再次点击数据库了吗?或者它是否在内存中的表的缓存副本上执行选择?

编辑:好的,经过多次编辑后,我想要的是,如果我们假设我已成功点击数据库并返回IQueryable,那么针对该对象的后续查询是否会击中数据库或保留在内存中?

2 个答案:

答案 0 :(得分:3)

在您发布的代码中,您点击了DB一次:当您调用.Single()时。 .Table1,.Where和.Select都被懒惰地评估,传递给.Single()调用。

答案 1 :(得分:3)

var tabledata = dbContext.Table1.Where(u => u.isActive);
int count = tabledata.Count();
致电Count()时会执行

string username = tabledata.Where(u => u.ID == 1)
                           .Select(u => u.Username)
                           .Single();
致电Single()时会执行

第二个调用是否缓存在内存中取决于您是否设置了缓存解决方案。在Linq to SQL或EF开箱即用时,这将对数据库进行两次调用。