Я узнаю о LINQ-to-SQL, и все шло хорошо, пока не произошло что-то странное:
Я попытался сделать пример distinct
, поэтому, используя dabatase Northwind, я написал следующий запрос:
var query =
from o in db.Orders
orderby o.CustomerID
select new
{
o.CustomerID
};
Если я распечатаю SQL, сгенерированный LINQ-to-SQL для запроса, хранящегося в query
, он выглядит следующим образом:
SELECT [t0].[CustomerID]
FROM [dbo].[Orders] AS [t0]
ORDER BY [t0].[CustomerID]
Итак, как обычно, запрос приносит все CustomerID
для каждого Order
в таблице Orders
, упорядоченной по алфавиту.
Но! Если я использую метод Distinct()
следующим образом:
var query = (
from o in db.Orders
orderby o.CustomerID
select new
{
o.CustomerID
}).Distinct();
Запрос выводит ожидаемые результаты предложения distinct
, но CustomerID
не упорядочены, несмотря на то, что я написал orderby o.CustomerID
!
Запрос SQL для этого второго запроса LINQ выглядит следующим образом:
SELECT DISTINCT [t0].[CustomerID]
FROM [dbo].[Orders] AS [t0]
Как мы видим, ** предложение ORDER BY
отсутствует. Почему это?
Почему предложение ORDER BY
исчезает, когда я использую метод Distinct()
?