Я использую Entity Framework для следующих целей: Получить последнюю строку, где некоторые столбцы равны X и Y. LINQ выглядит следующим образом (я также пытался переписать его как выражение «ОТ ГДЕ», среди прочего,безрезультатно):
var logEvent = Context.Set<Log>().Where(e =>
e.Id == id && e.MessageType == messageType)
.OrderByDescending(e => e.DateTime)
.FirstOrDefault();
Я ожидал бы, что это сгенерирует следующее:
SELECT TOP (1) *
FROM [dbo].[Log]
WHERE [Log].[Id] = @p__linq__0
AND [Log].[MessageType] = @p__linq__1
ORDER BY [Log].[DateTime] DESC
Вместо этого он генерирует внутренний Select, который просто повторяется по всей таблице, и выбор TOP1 из упорядоченных рядов.(Я проиндексировал DateTime и Id)
SELECT TOP (1) *
FROM ( SELECT *
FROM [dbo].[Log] AS [Extent1]
WHERE ([Extent1].[Id] = @p__linq__0)
AND ([Extent1].[MessageType] = @p__linq__1)
) AS [Project1]
ORDER BY [Project1].[DateTime] DESC
GO
Что вызывает этот внутренний SELECT?