如果我使用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,那么针对该对象的后续查询是否会击中数据库或保留在内存中?
答案 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开箱即用时,这将对数据库进行两次调用。