尽可能在内存中执行数据库中的查询

假设我们想要计算德克萨斯州有多少个县:

var counties = dbContext.States.Single(s => s.Code == "tx").Counties.Count();

查询是正确的,但效率低下。States.Single(…) 从数据库加载一个状态。接下来,Counties 在第二个查询中加载所有 254 个县及其所有字段。然后加载的 Counties 集合的内存中执行 .Count()
我们已经加载了许多我们不需要的数据,我们可以做得更好:

var counties = dbContext.Counties.Count(c => c.State.Code == "tx");

这里我们只做一个查询,在 SQL 中转换为计数和连接。我们只返回数据库中的计数 - 我们保存了返回的行,字段和对象的创建。

通过查看集合类型很容易看出查询的位置:IQueryable<T> vs. IEnumerable<T>