Я узнаю о 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()?