2012-06-04 11 views
5

simpleOrdenarPor objeto de Padres por anidada Colección

public class TimeLine 
{ 
    public String Name {get;set} 
    public List<Milestone> MilesStones {get;set} 
} 

public class Milestone 
{ 
    public String Name {get;set} 
    public DateTime Time {get;set} 
} 

he intentado: from t in DataAccess.TimelineCollection.OrderBy(c=>c.MilesStones.OrderBy(z=>z.MilestoneDate)) select t; pero tiene un error que "Al menos un objeto debe implementar IComparable."

Necesito ordenar TimeLine por Milestone.Time. El primer proyecto en una lista será el que tenga la propiedad Time más corta en la colección Milestone.

Necesita ayuda con el enlace.

Respuesta

10

suena como es posible que desee

var query = DataAccess.TimelineCollection 
         .OrderBy(t => t.MileStones.Min(m => m.Time)); 

En otras palabras, para cada TimeLine, encontrar el hito más temprano , y el uso que para el pedido.

Por supuesto, si los hitos están en orden, que puede usar:

var query = DataAccess.TimelineCollection 
         .OrderBy(t => t.MileStones.First().Time); 

Ambos se producirá un error si alguno TimeLine no tiene hitos.

+0

Jon, gracias por su respuesta. ¿Hay alguna manera de comprobar si TimeLine no tiene hitos y ponerlo en la parte superior? – dotsa

+0

'DataAccess.TimelineCollection .Where (m => m.MilesStones.Count! = 0) .OrderBy (t => t.MilesStones.Min (m => m.MilestoneDate)) .Concat ((DataAccess.TimelineCollection. Donde (m => m.MilesStones.Count == 0))); ' – dotsa

+0

@dotsa: Puede usar' .OrderBy (t.MileStones.Select (x => x.Time) .FirstOrDefault()) ' –

Cuestiones relacionadas