Ich habe einen Kundenmitgliedschaft Record Sets wie unten gezeigt.Condense konsekutiven Datumsbereich durch Entfernen überlappender Zeilen
CustomerId | EffectiveDate | EndDate | RecordNo
A1 | 01 - 01 - 2016 | 31 - 05 - 2016 | 1
A1 | 01 - 06 - 2016 | 31 - 10 - 2016 | 2
A1 | 01 - 09 - 2016 | 31 - 12 - 2017 | 3
A1 | 02 - 11 - 2016 | 31 - 12 - 2016 | 4
A2 | 02 - 11 - 2016 | 31 - 12 - 2016 | 5
Die Anforderung ist
- aufeinanderfolgende Daten in 1 Datumsbereich
- kombiniert werden müssen, wenn es eine Überlappung der Termine für einen bestimmten Kunden-ID ist, sollte die Zeile entfernt werden
Daher sollte mein Ergebnissatz wie folgt aussehen:
CustomerId | EffectiveDate | EndDate | IsBad
A1 | 01 - 01 - 2016 | 31 - 10 - 2016 | false
A1 | 01 - 09 - 2016 | 31 - 12 - 2017 | true
A1 | 02 - 11 - 2016 | 31 - 12 - 2016 | false
A2 | 02 - 11 - 2016 | 31 - 12 - 2016 | false
Das ist für den Kunden A1, 1 überlappende Zeile wurde auf abgelehnt (IsBad-Eigenschaft wird auf True festgelegt) festgelegt. 2 nebeneinander liegende Zeilen wurden zu einem Datumsbereich zusammengefasst. Aber Rekordzahl 4 wurde beibehalten wie sie ist, da sie eine eintägige Lücke war (war es nicht konsekutiv)
Die Daten in einem List<CustomerMembership>()
gespeichert wird, wo die CustomerMembership
Klasse CustomerId
, EffectiveDate
, EndDate
und IsBad
Eigenschaften hat.
Edit- Die Frage ist, wie bekomme ich die gewünschte Ausgabe (2. Satz von Daten) angesichts der Eingabe (1. Satz von Daten)?
Vielen Dank im Voraus
[Bitte stellen keine Tags in Frage Titel] (https://stackoverflow.com/help/tagging) – Liam
Was ist die Frage? – Liam
Versuchen Sie folgendes: var. = Von effdate in dt.AsEnumerable join() beitreten enddate in dt.AsEnumerable() auf effdate.Field ("EndDate") AddDays (1) gleich enddate.Field ("EffectiveDate") wähle neu {effdate = effdate, enddate = enddate}; –
jdweng