2016-05-11 2 views
0

В попытке устранить проблему, я заметил, что если я делаю LINQ to Entities запрос:Почему ading OrderByDescending добавляет подзапрос в 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 

Какая точка подзапроса?

ответ

2

Я предполагаю, что подзапрос предназначен для части «Где» (где (timesheet => timesheet.TimesheetHeaderID == headerID), а основной запрос - для части OrderByDescending (OrderByDescending (timesheet => timesheet.StartDateTime)) Итак, я предполагаю, что внутренний механизм LINQ состоит в том, чтобы обрабатывать каждую команду цепи отдельно.

+0

Вы избили меня до этого. Я собирался сказать что-то в этих строках. Мы должны угадать, хотя. Вероятно, это способ сохраняйте вещи простыми для генератора запросов, в то время как не возникает слишком много проблем для оптимизатора запросов db. –

Смежные вопросы