2009-09-16 36 views
5

Tôi đang gặp một số khó khăn để sắp xếp kết quả của mình theo Ngày. Có phương pháp đặc biệt nào không? Vì tôi đang làm việc này ngay bây giờ:ASP.NET MVC - Model.OrderBy Ngày không có hiệu lực

var db = new DB(); 
var articles = db.Articles; 
var orderedArticles = articles.OrderBy(a => a.Date); 
return View(orderedArticles.ToList()); 

Trường hợp ngày là trường ngày giờ. Và không có hiệu lực đối với OrderBy (..) hoặc OrderByDescending (..)

Vì vậy, tôi quản lý để kiểm tra những gì đang xảy ra.

Mỗi lần tôi thêm một Điều mới Tôi chỉ sử dụng ngày trên không phải là thời gian để nếu tôi có hai bài báo cả cho cùng một ngày, ví dụ: với:

var orderedArticles = db.Articles.OrderByDescending(a => a.Date).ToList(); 

tôi sẽ phải

Id   Title       Date 
10   First Added Article   16/09/2009 00:00 
11   Second Added Article   16/09/2009 00:00 
15   Old Article Added Later   15/09/2009 00:00 

Vì vậy, bạn có thể thấy rằng đó là lọc theo ngày, nhưng điều này là khi tôi có cùng ngày phân loại mất tiêu điểm. Vì vậy, những gì tôi đã làm là, orderBy hai bối cảnh khác nhau như thứ tự đầu tiên của Id và trật tự sau theo Ngày:

var orderedArticles = db.Articles.OrderByDescending(a => a.Id).OrderByDescending(a => a.Date).ToList(); 

Vì vậy, sau này tôi có như sau:

Id   Title       Date 
11   Second Added Article   16/09/2009 00:00 
10   First Added Article   16/09/2009 00:00 
15   Old Article Added Later   15/09/2009 00:00 

Tôi thực sự không biết nếu đây là cách đúng đắn để làm điều đó bởi vì vấn đề chính là khi bạn gửi một trường ngày như 16/09/2009 nó đặt thời gian đến 00:00 và đây là một vấn đề về tình trạng này.

+0

Xin lỗi - Tôi đã không có các vấn đề với các ngày sắp xếp, giả sử Date là một trường datetime. Có lẽ bạn có thể cụ thể hơn đối với loại/phiên bản cơ sở dữ liệu của bạn? –

+0

thử di chuyển OrderBy. Do: return View (articles.ToList(). OrderBy (a => a.Date)); Những gì bạn đang làm có vẻ đúng, nhưng điều này sẽ lấy cơ sở dữ liệu ra khỏi phương trình và chỉ cần sử dụng LINQ để sắp xếp đối tượng. Nếu điều này làm việc, sắp xếp không xảy ra trong truy vấn LINQ. – anonymous

Trả lời

6

Mã này có vẻ tốt. Bạn nên kiểm tra những gì thực sự trong trường Date và chắc chắn rằng bạn không cho ví dụ chỉ thiết lập Date của đối tượng DateTime ở cấp cơ sở dữ liệu, điều này sẽ dẫn đến tất cả các đối tượng DateTime của một ngày nhất định trỏ đến 00:00:00 do đó LINQ sẽ không biết cách sắp xếp chúng.

+0

Xin chào Robban chính xác là những gì bạn nói, tôi đã chỉnh sửa câu hỏi của mình. Nhưng sill, tôi không biết nếu đây là cách đúng đắn để làm điều đó. Cảm ơn sự giúp đỡ của bạn – zanona

6

Nhìn vào câu trả lời mà bạn cung cấp (mà FYI nên được chuyển thành những câu hỏi như một chỉnh sửa), bạn nên áp dụng một ThenBy, chứ không phải là một OrderBy mới:

var articles = db.Articles.OrderByDescending(a => a.Date).ThenBy(a => a.Id).ToList(); 
+0

Thật tuyệt vời, nhờ mẹo với phương thức ThenBy() Dan, tốt hơn nhiều như thế này. – zanona

Các vấn đề liên quan