Đó là một hạn chế của SQL và Relational Algebra của nơi ORDER BY là trong mối quan hệ đến DISTINCT.
ORDER BY phải là "tiếp tục" trong SQL (ở "cấp cao nhất") vì đây là hoạt động xem xem. Trong khi một có thể ghi SQL có ORDER BY "tiếp tục", trong mối quan hệ với một hoạt động RA, nó thường dẫn đến hành vi không xác định (đôi khi hoạt động). Trong ánh sáng này, có nghĩa là Linq2Sql là miễn phí để bỏ qua ORDER BY mặc dù, có lẽ ngoại lệ sẽ tốt hơn ... nó sẽ kém tinh tế hơn ;-) (Thực ra, cùng một vấn đề này tồn tại cho bất kỳ nhà cung cấp LINQ nào) không cung cấp định nghĩa "chặt chẽ hơn" của Phân biệt.)
Xóa Distinct()
và Linq2Sql một lần nữa sẽ tạo ORDER BY như mong đợi. Giải pháp chỉ là để chuyển đổi thứ tự của các hoạt động để ORDER BY một lần nữa ở "cấp cao nhất".
này được bao phủ bởi các bài viết Use of Distinct and OrderBy in LINQ:
Hành vi này có thể xuất hiện kỳ lạ. Vấn đề là toán tử Distinct không cho phép nó duy trì thứ tự ban đầu của các giá trị. Áp dụng cho LINQ to SQL, điều này có nghĩa là một ràng buộc sắp xếp có thể bị bỏ qua trong trường hợp truy vấn như queryA.
Giải pháp là của khá [i] mple: đưa các nhà điều hành OrderBy sau khi một biệt, giống như trong định nghĩa queryB sau:
var queryB =
(from o in db.Orders
select o.Employee.LastName)
.Distinct().OrderBy(n => n);
Chúc mừng mã hóa.
Nguồn
2012-03-19 04:32:01
là unit_number một cột sắc? – asawyer
không, số thứ tự không phải là danh tính. Nó là một kiểu dữ liệu int – KeelRisk