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

.net LINQ是否在内存中执行后续选择?,.net,linq,.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.Use

如果我使用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();
之后我想快速得到一个特定的值,所以我这样做:

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();
我是不是又碰到了DB?或者它对内存中表的缓存副本执行了select操作


编辑:好的,在多次编辑之后,我想得到的是,如果我们假设我已经成功地命中了数据库并返回了IQueryable,那么针对该对象的后续查询会命中数据库还是留在内存中?

在您发布的代码中,您只命中了一次数据库:当您调用.Single()时。.Table1、.Where和.Select都是惰性计算的,并传递到.Single()调用中。

在发布的代码中,您只需在调用.Single()时点击一次DB。.Table1、.Where和.Select都是惰性计算的,并传递到.Single()调用中

调用
Count()
时执行

调用
Single()
时执行

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

调用
Count()
时执行

调用
Single()
时执行


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

第一条语句不会进入数据库。好的,这是一个糟糕的示例。我在第一条语句中添加了where子句。请阅读LINQ延迟执行。。。第一条语句仍然没有返回到数据库。您希望它使用这些更新的查询返回到数据库。它们是不同的查询,使用不同的数据。您不希望EF将整个表拉入内存(除非您确实希望这样做,在这种情况下,编写这样做的查询,然后针对具体化的结果编写进一步的查询)(为了您的缘故,我希望如果这样做,表会很小)。第一条语句不会进入数据库。好的,这是一个糟糕的示例。我在第一条语句中添加了where子句。请阅读LINQ延迟执行。。。第一条语句仍然没有返回到数据库。您希望它使用这些更新的查询返回到数据库。它们是不同的查询,使用不同的数据。您不希望EF将整个表拉入内存(除非您确实希望这样做,在这种情况下,编写这样做的查询,然后针对具体化的结果编写进一步的查询)(为了您的缘故,我希望如果您这样做,表会很小)。对不起,我应该给出一个更好的示例。我已经更新了我的问题,以更好地反映我试图理解的内容。对不起,我应该举一个更好的例子。我更新了我的问题,以更好地反映我试图理解的内容。