IQueryable 的顺序是否保留在 C# EF Core 中的实际查询中?
Does the order of a IQueryable stay in the actual query in C# EF Core?
因此,当我为 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。
如果启用日志记录 SQL,您会发现这两个查询的顺序很重要
SELECT [t].[Id], [t].[Date], [t].[Variable]
FROM (
SELECT TOP(@__p_0) [m].[Id], [m].[Date], [m].[Variable]
FROM [MyObjects] AS [m]
ORDER BY [m].[Date]
) AS [t]
WHERE [t].[Variable] = N'something'
ORDER BY [t].[Date]
和
SELECT TOP(@__p_0) [m].[Id], [m].[Date], [m].[Variable]
FROM [MyObjects] AS [m]
WHERE [m].[Variable] = N'something'
ORDER BY [m].[Date]
可以通过在 appsettings.json
中为 EntityFramework Core 设置日志级别来启用日志记录
{
"Logging": {
"LogLevel": {
"Microsoft.EntityFrameworkCore": "Debug"
}
}
}
你还需要确保你的数据库上下文有这个特定的构造函数重载
public AppDbContext(DbContextOptions options) : base(options)
{
}
因此,当我为 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。
如果启用日志记录 SQL,您会发现这两个查询的顺序很重要
SELECT [t].[Id], [t].[Date], [t].[Variable]
FROM (
SELECT TOP(@__p_0) [m].[Id], [m].[Date], [m].[Variable]
FROM [MyObjects] AS [m]
ORDER BY [m].[Date]
) AS [t]
WHERE [t].[Variable] = N'something'
ORDER BY [t].[Date]
和
SELECT TOP(@__p_0) [m].[Id], [m].[Date], [m].[Variable]
FROM [MyObjects] AS [m]
WHERE [m].[Variable] = N'something'
ORDER BY [m].[Date]
可以通过在 appsettings.json
中为 EntityFramework Core 设置日志级别来启用日志记录{
"Logging": {
"LogLevel": {
"Microsoft.EntityFrameworkCore": "Debug"
}
}
}
你还需要确保你的数据库上下文有这个特定的构造函数重载
public AppDbContext(DbContextOptions options) : base(options)
{
}