为什么添加 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 的内部机制是分别处理每个链命令。
在尝试解决问题时,我注意到如果我执行 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 的内部机制是分别处理每个链命令。