2009-07-10 38 views
21

Tôi đã bắt đầu sử dụng LINQ to SQL cho một dự án im làm việc và tôi đã gặp phải vấn đề khi đặt hàng bởi trường DateTime nhưng vì DateTime cho phép nulls các giá trị rỗng sẽ đến ít hơn những ngày thực tế trong đó.Thứ tự DateTime rỗng trong LINQ to SQL

Vì vậy, tôi khá muốn những người có ngày ở trên cùng (được đặt hàng theo một trong hai cách) sau đó tất cả những người không có ngày đặt.

jobList = from ju in context.Job_Users_Assigned 
      where ju.UserID == user.ID 
      select ju.Job; 
return jobList.OrderByDescending(j => j.EndDate); 

Trả lời

45

Đây là một chút của một hack, nhưng nó xuất hiện để làm việc với LINQ to SQL:

return from ju in context.Job_Users_Assigned 
      where ju.UserID == user.ID 
      orderby ju.Created ?? DateTime.MaxValue descending; 

Vì vậy, tôi thay thế các giá trị DateTime tối đa có thể khi thực tế "Create" giá trị là vô giá trị. Điều đó sẽ đặt tất cả các giá trị null ở trên cùng.

Cách tiếp cận khác là đặt hàng theo trường ngày có giá trị hay không. Này hoạt động quá:

return from ju in context.Job_Users_Assigned 
      where ju.UserID == user.ID 
      orderby ju.Created.HasValue descending 
      orderby ju.Created descending; 
+3

Tôi không thể đặt ngón tay của tôi về việc tại sao chính xác, nhưng tôi tìm thấy giải pháp thứ hai của bạn khá đẹp –

+0

Nhìn vào câu hỏi một lần nữa, đó là một chút mơ hồ về việc liệu hỏi muốn null giá trị đầu tiên hay không (ông nói ông không, nhưng sau đó đặt hàng truy vấn giảm dần). Dù bằng cách nào, đó là một bước nhỏ từ một trong hai đoạn mã này đến những gì anh ta muốn. –

+0

Cảm ơn matt thats chính xác những gì tôi đang tìm kiếm. và đối với việc đặt hàng này chỉ là một ví dụ, tôi phải đặt nó theo những cách khác ở những nơi khác nhau nhưng giá trị null luôn luôn là cuối cùng. – dkarzon