2010-04-27 49 views
6

Tôi có một truy vấn LINQ một-nhiều và tôi muốn sắp xếp trên một thuộc tính trong bộ sưu tập "nhiều". Ví dụ trong mã giả bên dưới, tôi trả về một Danh sách từ truy vấn LINQ nhưng tôi muốn sắp xếp/sắp xếp thuộc tính Sản phẩm dựa trên thuộc tính SequenceNumber của lớp Sản phẩm. Tôi có thể làm cái này như thế nào? Mọi thông tin đều được đánh giá cao. Cảm ơn.Sắp xếp bộ sưu tập trong bộ sưu tập bằng cách sử dụng LINQ

public class Order 
{ 
    public int OrderId; 
    public List<Product> Products; 
} 

public class Product 
{ 
    public string name; 
    public int SequenceNumber; 
} 

Trả lời

2

Trong Order, chỉ cần làm

Products = Products.OrderBy(o => o.SequenceNumber); 

Ngoài ra còn có một phương pháp Sort() trong List<T> để sắp xếp danh sách trực tiếp.

+0

"pseudo-code bên dưới" – Andrey

+0

xin lỗi, tôi cập nhật các pseudo-code trong bài viết ban đầu của tôi để bao gồm các bộ truy xuất (tất cả những gì là công khai) – HBCondo

4
order.Product.OrderBy(p => p.SequenceNumber); 
4

Như tôi đã đọc câu hỏi của bạn, câu hỏi của bạn trả về IEnumerable < tự > và bạn muốn sắp xếp chúng trên SequenceNumber.

Để sắp xếp thứ gì đó, nó phải có một giá trị. Có nhiều SequenceNumber vì có nhiều Sản phẩm. Bạn cần quyết định cách bạn sẽ chọn số để sắp xếp.

Giả sử bạn muốn sắp xếp các đơn đặt hàng trên SequenceNumber lớn nhất cho Sản phẩm trên Đơn đặt hàng đó. Sau đó, một truy vấn có thể là:

from order in orders 
orderby order.Products.Max(p=>p.SequenceNumber) 
select order; 
+0

tôi thích phương pháp này b/c nó cho phép sắp xếp trong linq qu ery chính nó. tuy nhiên, tôi nhận được quyền truy cập của Thành viên 'Int32 SequenceNumber' không phải lỗi pháp lý khi cố gắng thực hiện việc này. – HBCondo

2

Nếu bạn muốn sắp xếp bộ sưu tập "tại chỗ", chỉ cần gọi

Products.Sort((lhs, rhs) => lhs.SequenceNumber.CompareTo(rhs.SequenceNumber)); 

Nếu bạn muốn sắp xếp bộ sưu tập "theo yêu cầu", chỉ cần sử dụng LINQ:

foreach (var product in order.Products.OrderBy(x => x.SequenceNumber)) { 
} 
Các vấn đề liên quan