2010-01-01 30 views
79

Nói rằng tôi có những giá trị trong một bảng cơ sở dữ liệuLàm thế nào để sử dụng orderby với 2 trường trong LINQ?

id = 1 
StartDate = 1/3/2010 
EndDate = 1/3/2010 

id = 2 
StartDate = 1/3/2010 
EndDate = 1/9/2010 

Bây giờ tôi có cho đến nay orderby này cho LINQ tôi

var hold = MyList.OrderBy(x => x.StartDate).ToList(); 

tôi muốn đặt nó tuy nhiên cũng sử dụng ngày kết thúc.

Giống như thứ tự tôi muốn này trong khi

id 2 
id 1 

Vì vậy endDates mà là lớn hơn đi đầu tiên. Tôi không chắc chắn nếu tôi cần phải thay đổi điều này để sử dụng một số chức năng so sánh hoặc một cái gì đó.

+4

thể trùng lặp của [Nhiều "Đặt hàng bằng" trong LINQ] (http://stackoverflow.com/questions/298725/multiple-order-by-in-linq) – Moes

Trả lời

135
MyList.OrderBy(x => x.StartDate).ThenByDescending(x => x.EndDate); 
38

Sử dụng ThenByDescending:

var hold = MyList.OrderBy(x => x.StartDate) 
       .ThenByDescending(x => x.EndDate) 
       .ToList(); 

Bạn cũng có thể sử dụng cú pháp truy vấn và nói:

var hold = (from x in MyList 
      orderby x.StartDate, x.EndDate descending 
      select x).ToList(); 

ThenByDescending là một phương pháp mở rộng trên IOrderedEnumerable đó là những gì được trả về bởi OrderBy. Xem thêm phương pháp liên quan ThenBy.

+0

cảm ơn bạn - bạn có biết loại cấu trúc được giữ không? Danh sách các mục MyList? – BKSpurgeon

3

VB.NET

MyList.OrderBy(Function(f) f.StartDate).ThenByDescending(Function(f) f.EndDate) 

HOẶC

From l In MyList Order By l.StartDate Ascending, l.EndDate Descending 
+2

Có bất kỳ sự khác biệt nào giữa 'Từ l Trong Đơn hàng MyList Bởi l.StartDate Thứ tự Tăng dần theo l.EndDate Descending' và' Từ l Trong MyList Order Bởi l.StartDate Ascending, l.EndDate Descending'? – Oleksandr

+0

@Oleksandr Có, biến thể của Abdul tương đương với chỉ làm theo thứ tự thứ hai, vì vậy nó không chính xác. – John

+0

@John và @ oleksandr Cảm ơn bạn đã xác định sai lầm không phải là nó đã được sửa chữa –

4
MyList.OrderBy(x => x.StartDate).ThenByDescending(x => x.EndDate); 

Lưu ý rằng bạn có thể sử dụng cũng như các từ khóa dần trong OrderBy (trong trường hợp bạn cần). Vì vậy, một câu trả lời có thể là:

MyList.OrderByDescending(x => x.StartDate).ThenByDescending(x => x.EndDate); 
1

Nếu bạn có hai hoặc trường hơn để đặt hàng thử điều này:

var soterdList = initialList.OrderBy(x => x.Priority). 
            ThenBy(x => x.ArrivalDate). 
            ThenBy(x => x.ShipDate); 

Bạn có thể thêm các lĩnh vực khác với clasole "ThenBy"

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