Tôi đang tìm hiểu về LINQ-to-SQL và tất cả mọi thứ đã tiến triển tốt cho đến khi một cái gì đó kỳ lạ đã xảy ra:DISTINCT() và ORDERBY vấn đề
tôi đã cố gắng để làm cho một ví dụ về distinct
, vì vậy, sử dụng dabatase Northwind Tôi đã viết truy vấn sau đây:
var query =
from o in db.Orders
orderby o.CustomerID
select new
{
o.CustomerID
};
Nếu tôi in SQL được tạo ra bởi LINQ-to-SQL cho truy vấn được lưu trữ trong query
nó trông như thế này:
SELECT [t0].[CustomerID]
FROM [dbo].[Orders] AS [t0]
ORDER BY [t0].[CustomerID]
Vì vậy, như thường lệ, truy vấn mang tất cả CustomerID
cho mỗi Order
trong bảng Orders
được sắp xếp theo thứ tự bảng chữ cái.
Nhưng! Nếu tôi sử dụng phương pháp Distinct()
như thế này:
var query = (
from o in db.Orders
orderby o.CustomerID
select new
{
o.CustomerID
}).Distinct();
Truy vấn mang lại kết quả mong đợi của mệnh đề Distinct
, nhưng CustomerID
s không ra lệnh mặc dù tôi đã viết orderby o.CustomerID
!
Truy vấn SQL cho truy vấn LINQ thứ hai này là như sau:
SELECT DISTINCT [t0].[CustomerID]
FROM [dbo].[Orders] AS [t0]
Như chúng ta có thể thấy ** mệnh đề ORDER BY
là mất tích. Tại sao vậy?
Tại sao mệnh đề ORDER BY
biến mất khi tôi sử dụng phương thức Distinct()
?
Là một dành cú pháp lambda là đơn giản hơn nhiều cho các truy vấn như thế này: 'var query = db.Orders.Select (o => o .CustomerId) .Distinct(); ' – asawyer