为什么添加 OrderByDescending 会在 LINQ to Entities 中添加一个子查询?

Why does adding OrderByDescending add a sub-query in LINQ to Entities?

在尝试解决问题时,我注意到如果我执行 LINQ to Entities 查询:

var timeRecords = db.Timesheets
.Where(timesheet => timesheet.TimesheetHeaderID == headerID);

我收到这样的查询:

SELECT 
[Extent1].[ID] AS [ID], 
[Extent1].[TimesheetHeaderID] AS [TimesheetHeaderID], 
[Extent1].[StartDateTime] AS [StartDateTime], 
[Extent1].[EndDateTime] AS [EndDateTime], 
[Extent1].[ProjectCode] AS [ProjectCode], 
[Extent1].[TaskCode] AS [TaskCode], 
[Extent1].[WorkDescription] AS [WorkDescription]
FROM [dbo].[Timesheet] AS [Extent1]
WHERE [Extent1].[TimesheetHeaderID] = @p__linq__0

但是如果我像这样添加 OrderByDescending()

var timeRecords = db.Timesheets
.Where(timesheet => timesheet.TimesheetHeaderID == headerID)
.OrderByDescending(timesheet => timesheet.StartDateTime);

我得到一个带有这样子查询的查询:

SELECT 
[Project1].[ID] AS [ID], 
[Project1].[TimesheetHeaderID] AS [TimesheetHeaderID], 
[Project1].[StartDateTime] AS [StartDateTime], 
[Project1].[EndDateTime] AS [EndDateTime], 
[Project1].[ProjectCode] AS [ProjectCode], 
[Project1].[TaskCode] AS [TaskCode], 
[Project1].[WorkDescription] AS [WorkDescription]
FROM ( SELECT 
    [Extent1].[ID] AS [ID], 
    [Extent1].[TimesheetHeaderID] AS [TimesheetHeaderID], 
    [Extent1].[StartDateTime] AS [StartDateTime], 
    [Extent1].[EndDateTime] AS [EndDateTime], 
    [Extent1].[ProjectCode] AS [ProjectCode], 
    [Extent1].[TaskCode] AS [TaskCode], 
    [Extent1].[WorkDescription] AS [WorkDescription]
    FROM [dbo].[Timesheet] AS [Extent1]
    WHERE [Extent1].[TimesheetHeaderID] = @p__linq__0
)  AS [Project1]
ORDER BY [Project1].[StartDateTime] DESC

子查询的意义何在?

我猜子查询是针对 "Where" 部分(Where(timesheet => timesheet.TimesheetHeaderID == headerID),主查询是针对 OrderByDescending 部分(OrderByDescending(timesheet = > timesheet.StartDateTime))。 所以我假设 LINQ 的内部机制是分别处理每个链命令。