2010-04-27 5 views
6

일대 다 Linq 쿼리가 있는데 "many"콜렉션 내의 특성을 정렬하려고합니다. 예를 들어 아래의 의사 코드에서 Linq 쿼리의 List가 반환되었지만 Product 클래스의 SequenceNumber 속성을 기반으로 Products 속성을 정렬/정렬하고 싶습니다. 어떻게해야합니까? 모든 정보는 높이 평가됩니다. 감사.Linq을 사용하여 콜렉션 내의 콜렉션을 정렬하십시오.

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

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

답변

2

Order 내에서, 단순히 직접 목록을 정렬 할 수 List<T> 내에서 Sort() 방법도 있습니다

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

을한다. 내가 질문을 읽으면서

+0

"아래 의사 코드" – Andrey

+0

그것은이 (가) 내에서 정렬 할 수 있습니다/C B, 나는 접근을 (모든 것이 공개) – HBCondo

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

, 쿼리는 IEnumerable을 < 주문 > 반환하고 당신은 SequenceNumber에 그들을 정렬 할.

무언가를 정렬하려면 하나의 값이 있어야합니다. 제품이 여러 개 있기 때문에 SequenceNumber가 여러 개 있습니다. 정렬 할 번호를 선택하는 방법을 결정해야합니다.

해당 주문에있는 제품의 최대 SequenceNumber에서 주문을 정렬하려고한다고 가정 해 봅시다. 그런 다음 쿼리 수 :

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

내가이 방법을 같이 포함하도록 내 원래의 게시물에 의사 코드를 업데이트 죄송합니다 린크 큐 ery 그 자체. 그러나이 작업을 시도 할 때 구성원 액세스 'Int32 SequenceNumber'법적 오류가 나타납니다. – HBCondo

2

을 당신이 "온 디맨드"컬렉션을 정렬 할 경우 단지

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

전화, "현재 위치에서"컬렉션을 정렬 할 경우에, 다만 사용 LINQ :

foreach (var product in order.Products.OrderBy(x => x.SequenceNumber)) { 
} 
관련 문제