Tôi có thể làm một đơn đặt hàng sau đó bằng cách sử dụng cú pháp ở trên mà không sử dụng cú pháp tiện ích.
Sử dụng một dấu phẩy giữa các lĩnh vực:
orderby a, b
Và những gì hiện các orderby, orderby làm gì?
Khi bạn sử dụng orderby
hai lần liên tiếp các yếu tố về mặt khái niệm đầu tiên sẽ được sắp xếp bằng cách sử dụng orderby
đầu tiên, và sau đó sắp xếp một lần nữa bằng cách sử dụng thứ hai orderby
. Bởi vì việc phân loại được định nghĩa là một stable sort (đối tượng được gắn với thứ hai orderby
sẽ vẫn theo thứ tự như sau khi phân loại với orderby
đầu tiên nó có hiệu quả có nghĩa rằng đây:
var query = from x in l
orderby x.A
orderby x.B
select x;
tương đương với:
var query = from x in l
orderby x.B, x.A
select x;
kết quả là các điều khoản orderby
được hoán đổi từ những gì bạn có thể mong đợi.
kiểm tra nó với LINQ to SQL
Điều này có thể được xác minh bằng cách thử trong LINQ to SQL. Tôi tạo ra các truy vấn sau đây:
var query = from a in dc.Orders
orderby a.Date
orderby a.CustomerID
select a;
và đây là SQL tạo:
SELECT [t0].[ID], [t0].[CustomerID], [t0].[Date], [t0].[Description]
FROM [dbo].[Order] AS [t0]
ORDER BY [t0].[CustomerID], [t0].[Date]
Lưu ý rằng orderby a.Date
không bỏ qua. Cả hai điều khoản được bao gồm trong mệnh đề ORDER BY, nhưng theo thứ tự ngược lại bạn có thể đã dự định.
Nguồn
2010-05-25 19:59:48
Theo đặc điểm kỹ thuật, OrderBy luôn là một loại ổn định (bất kể nhà cung cấp LINQ.) Điều đó có nghĩa là "nếu các khóa của hai phần tử bằng nhau, thứ tự của các phần tử được giữ nguyên." Việc OrderBy's có giữ nguyên thứ tự sẽ giữ nguyên thứ tự phụ thuộc vào các khóa đang được sử dụng hay không, không phải trên nhà cung cấp LINQ (mặc dù điều đó rõ ràng sẽ ảnh hưởng đến các giá trị khóa). – hemp
@hemp: Sau khi tìm hiểu thêm, tôi nghĩ bạn đúng. Kỳ lạ thay vì câu trả lời của riêng bạn, nơi bạn trích dẫn từ MSDN ('Làm điều này giới thiệu một thứ tự chính mới bỏ qua thứ tự đã thiết lập trước đó. ') Mâu thuẫn với những gì bạn vừa nói trong bình luận này. Nhưng tôi nghĩ rằng MSDN của nó đó là sai. –
Nó không trực tiếp mâu thuẫn, nó chỉ là khó hiểu. Những gì nó nói là thứ tự hiện tại sẽ không được đưa vào tài khoản theo thứ tự chính mới. ** Tuy nhiên **, một khi nó áp dụng thứ tự ban đầu, nếu thứ tự mới tìm các giá trị khóa bằng nhau, nó sẽ không sắp xếp lại các mục đó. Vì vậy, trên thực tế cả hai phát biểu đều đúng, chỉ không rõ ràng. – hemp