2010-04-27 13 views
6

Tengo una consulta de Linq de uno a muchos y me gustaría ordenar en una propiedad dentro de la colección "muchos". Por ejemplo, en el pseudocódigo siguiente, se me devuelve una lista de la consulta de Linq, pero me gustaría ordenar/ordenar la propiedad de los productos en función de la propiedad SequenceNumber de la clase Product. ¿Cómo puedo hacer esto? Cualquier información es apreciada. Gracias.Ordenar la colección dentro de la colección usando Linq

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

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

Respuesta

2

Dentro Order, sólo tiene que hacer

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

También hay un método Sort() dentro List<T> para ordenar directamente la lista.

+0

"pseudo-código de abajo" – Andrey

+0

lo siento, he actualizado el pseudo-código en mi post original para incluir los descriptores de acceso (todo es público) – HBCondo

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

Al leer su pregunta, la consulta devuelve IEnumerable <Solicitar> y desea ordenarlos en SequenceNumber.

Para ordenar algo, debe tener un valor de. Hay varios SequenceNumber porque hay varios Productos. Debe decidir cómo seleccionará el número para ordenar.

Digamos que desea ordenar los pedidos en el SequenceNumber más grande para Productos en ese Pedido. A continuación, una consulta podría ser:

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

me gusta este enfoque b/c que permite la clasificación dentro de la linq qu ery en sí. sin embargo, recibo un error de acceso al miembro 'Int32 SequenceNumber' no legal al intentar hacer esto. – HBCondo

2

Si desea ordenar la colección "in situ", simplemente llame

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

Si desea ordenar la colección "bajo demanda", sólo tiene que utilizar LINQ:

foreach (var product in order.Products.OrderBy(x => x.SequenceNumber)) { 
} 
Cuestiones relacionadas