В качестве примера, скажем, я использую Entity SQL (не LINQ или T-SQL) для запроса базы данных Northwind.Я хочу получить дату заказа и название компании для всех заказов, размещенных в самые последние 5 дат, которые существуют в базе данных .Это довольно просто в T-SQL, но мне очень трудно разобраться, как это сделать в Entity SQL, и я был бы признателен за любые указатели.
Вот запрос, который генерирует мой код:
SELECT [T_Orders].[OrderDate], [T_Orders].[ShippedDate], [T_Customers].[CompanyName]
FROM [NorthwindContext].[Orders] AS [T_Orders]
INNER JOIN [NorthwindContext].[Customers] AS [T_Customers] ON [T_Customers].[CustomerID] = [T_Orders].[CustomerID]
WHERE [T_Orders].[OrderDate] IN
(SELECT VALUE DISTINCT [S_Orders].[OrderDate]
FROM [NorthwindContext].[Orders] AS [S_Orders]
ORDER BY [S_Orders].[OrderDate] DESC LIMIT(5))
ORDER BY [T_Orders].[OrderDate] ASC SKIP(@skip) LIMIT(@limit)
Это приводит меня к следующей ошибке:
'S_Orders.OrderDate' не может быть разрешен в текущей области или контексте.Убедитесь, что все ссылочные переменные находятся в области видимости, что необходимые схемы загружены и что на пространства имен ссылаются правильно.Рядом с выражением доступа к члену, строка 5, столбец 143.
Если я уберу предложение ORDER BY / LIMIT в подзапросе, я не получу ошибок, и мой запрос вернет все строки в таблице.Если добавить ТОП (5) к SELECT в подзапросе, то я получу самые старые 5 дат, но не самые последние 5 дат.
Может кто-нибудь сказать мне, что я ошибся в своей сущностиСинтаксис SQL или предложить другой способ получения желаемых результатов с помощью Entity SQL?
Обновление
Благодаря советам Тит Лвин Оо я смог выработатьследующий запрос, который помог мне.
SELECT [T_Orders].[OrderDate], [T_Orders].[ShippedDate], [T_Customers].[CompanyName]
FROM [NorthwindContext].[Orders] AS [T_Orders]
INNER JOIN [NorthwindContext].[Customers] AS [T_Customers] ON [T_Customers].[CustomerID] = [T_Orders].[CustomerID]
INNER JOIN
(
SELECT [T_Orders].[OrderDate]
FROM [NorthwindContext].[Orders] AS [T_Orders]
GROUP BY [T_Orders].[OrderDate]
ORDER BY [T_Orders].[OrderDate] DESC LIMIT(5)
) AS REC ON ([T_Orders].[OrderDate] = REC.[OrderDate])