2010-04-27 14 views
6

Ben bir çoktan Linq sorgusu var ve ben bir "çok" koleksiyonu içinde bir özellik sıralamak istiyorum. Örneğin, aşağıdaki sözde kodda, Linq sorgusundan bir Listeyi döndürdüm, ancak Products özelliğinin Product sınıfının SequenceNumber özelliğine göre sıralanmasını/siparişini vermek istiyorum. Bunu nasıl yapabilirim? Herhangi bir bilgi takdir edilir. Teşekkürler.Koleksiyon içindeki koleksiyonu koleksiyonla birlikte Linq

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

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

cevap

2

Order içinde, sadece doğrudan listeyi sıralamak için List<T> içinde Sort() yöntem de vardır

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

yapmak. Sorunuzu okurken

+0

"aşağıdaki sözde kod" – Andrey

+0

o dahilinde sıralama verir b/c, i erişimcilere (herşey herkese açıktır) – HBCondo

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

, sorgu IEnumerable < Sipariş > döndürür ve SequenceNumber bunları sıralamak istiyorum.

Bir şeyleri sıralamak için, bir değerine sahip olmalıdır. Birden çok ürün olduğu için birden çok SequenceNumber vardır. Sıralanacak numarayı nasıl seçeceğinize karar vermeniz gerekiyor.

Siparişleri, bu Siparişteki Ürünler için en büyük Sıralama Sayısında sıralamak istediğinizi varsayalım. Sonra bir sorgu olabilir:

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

ben bu yaklaşım gibi dahil etmek benim orijinal sonrası sözde kodu güncellenen üzgün linq qu ery'nin kendisi. Ancak, bunu yapmaya çalışırken 'Int32 SequenceNumber' bir üye erişimini yasal hata olarak almıyorum. – HBCondo

2

Eğer "on-demand" Koleksiyonu sıralamak isterseniz sadece

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

diyoruz, "yerinde" Koleksiyonu sıralamak isterseniz, sadece kullanma LINQ:

foreach (var product in order.Products.OrderBy(x => x.SequenceNumber)) { 
} 
İlgili konular