1

如果我使用 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,那么针对该对象的后续查询会访问数据库还是留在内存中?

4

2 回答 2

3

在您发布的代码中,您点击了一次数据库:当您调用 .Single() 时。.Table1、.Where 和 .Select 都被延迟评估,传递到 .Single() 调用。

于 2013-06-03T21:06:34.690 回答
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 中,这将对数据库进行两次调用。

于 2013-06-03T21:22:03.660 回答