【发布时间】:2026-02-04 16:45:02
【问题描述】:
因此,当我为 DbContext 编写查询时,可查询的顺序实际上是否代表输出查询。例如:
_dbContext
.Table
.OrderBy(i => i.Date)
.Take(25)
.Where(i => i.Variable == "something")
.ToList()
对
_dbContext
.Table
.Where(i => i.Variable == "something")
.OrderBy(i => i.Date)
.Take(25)
.ToList()
所以这些查询是不同的,因为第一个查询按日期获取最后 25 个项目并执行 where 子句。但是另一个从 where 的结果中取 25。
当它被执行时会保持这个顺序,还是像一个构建器一样,所有属性都被设置和执行。
如果我查看普通 SQL,我无法在同一查询中的 WHERE 之前使用 TAKE。所以这对我来说是有道理的。
我感到困惑的原因是,如果我用 MS SQL 编写第一个查询,我们会得到:
SELECT TOP 25 * FROM `Table` WHERE `Variable` = 'something' ORDER BY `Date`
从 where 结果中取 25。
【问题讨论】:
-
您无法真正在
IQueryable和SQL 语句之间进行比较。 EF 生成的 SQL 可能与您的示例完全不同。
标签: c# linq entity-framework-core iqueryable