2016-06-30 11 views
1

Ich habe folgende Aufgabe - eine Liste von Objekten (Zeitsegmente) gegeben. TimeSegment ist die folgende Art:So erhalten Sie Gruppen von Elementen abhängig von einer Bedingung

class TimeSegment 
{ 
     public DateTime Start{get;set;} 
     public DateTime End{get;set;} 
} 

Diese Segmente zuvor von Start.Date Wert gruppiert sind. Ich brauche Segmente aus jeder Gruppe, wobei End.TimeOfDay eines Segments gleich Start.TimeOfDay eines anderen Elements ist. Gibt es eine Möglichkeit, solche Dinge mit LINQ zu tun? Danke für Anregungen.

+0

vielleicht Wette Wenn Sie mehr Code posten? – tire0011

Antwort

1

Dies ist eine Möglichkeit, es zu tun:

erstellen und die Gruppe füllen:

var group = new List<TimeSegment>(); 

group.Add(new TimeSegment() { Start = DateTime.Today.AddHours(1), End = DateTime.Today.AddHours(2) }); 
group.Add(new TimeSegment() { Start = DateTime.Today.AddHours(3), End = DateTime.Today.AddHours(4) }); 
group.Add(new TimeSegment() { Start = DateTime.Today.AddHours(4), End = DateTime.Today.AddHours(5) }); 
group.Add(new TimeSegment() { Start = DateTime.Today.AddHours(6), End = DateTime.Today.AddHours(7) }); 

aufeinander folgende Zeitabschnitte Get (nach Startzeit geordnet):

var result = group.Where(t1 => group.Any(t2 => t2.End == t1.Start || t2.Start == t1.End)).OrderBy(t => t.Start).ToList(); 

See fiddle here.

+0

Was ist, wenn es mehr als 2 aufeinanderfolgende Zeitsegmente gibt? –

+0

Es würde alle brauchen. Ich habe in meiner Antwort einen Link zur Geige hinzugefügt. –

+0

Cool, danke. Wird es an verschiedenen Fällen testen? –

0

So ähnlich?

List<TimeSegment> times = db.TimeSegment.Where(t=>t.End.TimeOfDay.Equals(t.Start.Date)).ToList(); 
+0

, die den Anfang und das Ende eines einzelnen timeSegment vergleichen würde. –

Verwandte Themen