2009-05-15 39 views
14

Chúng tôi có một Danh sách chung (Sản phẩm) phải được sắp xếp theo hai hoặc nhiều thuộc tính của lớp Sản phẩm.Sắp xếp danh sách chung trên hai hoặc nhiều giá trị

Lớp sản phẩm có thuộc tính "Phổ biến" số (asc), "Đã nhấp" số (desc), "Tên" chuỗi (asc). Để đặt tên các thuộc tính chúng ta muốn danh sách sắp xếp.

Làm cách nào để sắp xếp với câu lệnh lamba? Nếu đã tìm thấy sắp xếp danh sách dựa trên một thuộc tính.

Trả lời

3

Tôi xin lỗi nhưng bạn có biết bất kỳ C# nào không?

products.OrderBy(p => p.Popular). 
    ThenByDescending(p => p.Clicked). 
    ThenBy(p => p.Name); 

Bạn có thể nhận được những gì bạn cần từ điều này không?

+0

rực rỡ! Tôi không biết về "ThenBy" – BrokeMyLegBiking

30

EDIT Chỉ cần nhận ra đây là câu hỏi VB. Đây là giải pháp VB.Net

Dim list = GetSomeList() 
Dim sorted = list. _ 
    OrderBy(Function(x) x.Popular). _ 
    ThenBy(Function(x) x.Clicked). _ 
    ThenBy(Function(x) x.Name) 

Phiên bản C#. Hãy thử như sau

var list = GetSomeList(); 
var sorted = list.OrderBy(x => x.Popular).ThenBy(x => x.Clicked).ThenBy(x => x.Name); 
5

Để trả lời câu hỏi của bạn về một biểu thức lambda, đó là quá phức tạp để đưa vào một biểu thức lambda, như VB không hỗ trợ biểu thức lambda nhiều đường.

Đối với một giải pháp phi LINQ:

Bạn cần một phương thức có tên như một Comparer:

Private Function Comparer(ByVal x As Product, ByVal y As Product) As Integer 
    Dim result As Integer = x.Popular.CompareTo(y.Popular) 
    If result = 0 Then 
     result = x.Clicked.CompareTo(y.Clicked) 
     If result = 0 Then 
      result = x.Name.CompareTo(y.Name) 
     End If 
    End If 
    Return result 
End Function 

Cách sử dụng:

theList.Sort(AddressOf Comparer) 
+0

Giải quyết được vấn đề tôi gặp phải. Cảm ơn! – John

+0

@Guffa - VB hỗ trợ các biểu thức lambda đa cấp. –

+0

@roryap: Có, nó hiện nay. Không phải khi câu trả lời được viết. – Guffa

2
List<Product> sortedProducts = null; 
sortedProducts = products.OrderBy(p => p.Popular) 
         .ThenByDescending(p => p.Clicked) 
         .ThenBy(p => p.Name) 
         .ToList(); 
Các vấn đề liên quan