Ich habe eine Liste von Ereignissen und jetzt möchte ich herausfinden, welche Ereignisse sich überschneiden. Im Folgenden finden Sie den Code, den ich derzeit habe, aber ich habe das Problem, dass das Objekt, nach dem gesucht wird, auch in der Liste enthalten ist.Finden Sie überlappende Zeiträume (Ereignisse) mit LINQ
List<SomeEventObject> overlappingEvents = new List<SomeEventObject>();
foreach (SomeEventObject eventItem in EventList)
{
bool overlapping = false;
foreach (SomeEventObject anotherEventItem in EventList)
{
if (eventItem.StartDate <= anotherEventItem.EndDate &&
eventItem.EndDate >= anotherEventItem.StartDate)
{
overlapping = true;
overlappingEvents.Add(anotherEventItem);
}
}
if (overlapping)
overlappingEvents.Add(eventItem);
}
Ich müsste eine neue Liste ohne das gesuchte Objekt erstellen. Daher frage ich, ob es einen schönen LINQ-Ausdruck gibt, der das für mich handhaben kann. Dies ist einige Pseudo-Code ich gedacht:
EventList.Where(e =>
eventItem.StartDate <= e.EndDate &&
eventItem.EndDate >= e.StartDate);
In diesem Zusammenhang eventItem natürlich nicht existieren.
Als Ergebnis denke ich, ich würde zwei Listen benötigen: eine mit überlappenden Ereignissen und eine mit nicht überlappenden Ereignissen. Aber das sollte mit .Except()
möglich sein, wenn ich meine überlappende Ereignisliste habe.
Edit:
ich angelegt habe ein dotnetfiddle so dass man mit ihm spielen. Eine wichtige Frage ist der überlappende Algorithmus.
Ereignis 1:
Startdatum: Heute, 10.00
EndDate: Heute, 10:05
Ereignis 2:
Startdatum: Heute, 10.05
EndDate: heute , 10:10
Wenn Sie dies dem Benutzer präsentieren, dann überlappt dies NICHT. Also muss ich meinen Algorithmus überarbeiten.
Einfach einfach durch Id ausschließen. Ein Artikel passt immer in seinen eigenen Zeitrahmen. –
Was meinst du mit * überlappen *. Es ist möglich, dass sich Ereignis * A * mit * B * und * B * mit * C * überschneidet. Aber das bedeutet nicht, dass sich * A * mit * C * überschneidet. Überlappen ist eine relative Eigenschaft. –
Wie viele Ereignisse haben Sie in dieser Liste? Durchschnitt/Normal gegenüber Worst Case? –