Date-Diff in DataTable.Select

  • Sonstige

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Manü.

    Date-Diff in DataTable.Select

    Ahoi

    ich habe eine DataTable und möchte darauf ein Select starten, was aber nicht das Problem ist.
    In dieser DataTable sind mehrere Rows, die Zeiträume darstellen (Beginn-Datum / End-Datum).
    Ich möchte jetzt herausfinden, welche nachfolgenden Zeiträume, hintereineander weg angrenzen.

    Ich würde es sonst mit einer foreach lösen, wollte aber mal wissen, ob und wie ich das bereits mit einem DataTable.Select filtern kann. Ich kann mir vorstellen, dass da eine rekursive Abfrage stattfinden muss?
    Erhalten möchte ich dann, die letzte DataRow, die diesem Filter entspricht.

    Danke schon mal im Voraus.
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de

    Manü schrieb:

    (Beginn-Datum / End-Datum)
    Ein Zeitraum ist bei mir [von - bis] ?
    Ich möchte jetzt herausfinden, welche nachfolgenden Zeiträume, hintereineander weg angrenzen.
    Erhalten möchte ich dann, die letzte DataRow, die diesem Filter entspricht.
    Meinst du damit, die DataRow mit dem kleinsten Zeit-Abstand zum aktuell angewählten Datensatz?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB1963“ ()

    VB1963 schrieb:

    Ein Zeitraum ist bei mir [von - bis] ?

    So war das eigentlich auch gemeint, im Datensatz gibt es halt den Beginn und das Ende des Zeitraums.

    VB1963 schrieb:

    Meinst du damit, die DataRow mit dem kleinsten Zeit-Abstand zum aktuell angewählten Datensatz?

    Nope.
    Es können mehrere Zeiträume miteinander verknüpft sein. Die Zeiträume habe ich bereits. Aus diesen Zeiträumen möchte ich wissen, ob es zum aktuellen Zeitraum folgende Zeiträume gibt, die ohne Abstand angrenzen.
    Also keine Unterbrechungen dazwischen liegen.
    Es geht um Fehlzeiten. Wenn also bspw. zwischen ZR1 und ZR2 ein Tag dazwischen liegt ist dieser und alle weiteren belanglos.
    Wenn aber zwischen ZR1 und ZR2 kein Tag dazwischen liegt, also z.B. ZR2-Beginn - 1 Tag = ZR1-Ende, dann sollte das Ergebnis ZR2 sein. Das könnte sich dann über weitere Zeiträume ziehen, so dass der letzte ZR der direkt an die vorderen angrenzt das Ergebnis darstellt.
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    Die DataTable.Select-Methode darf man nicht mit Sql-Select verwechseln. Ihre Funktionalität ist dieselbe wie beim DataView.Filter oder BindingSource.Filter. Hier klein Tut dazu, mit Weiter-Link zur Doku: DataExpressions: Filter und berechnete Spalten im Dataset
    Also es ist eine eigene kleine Grammatik, anzugeben recht unsicher als Text innerhalb von Strings, mit der man paar Tricks machen kann, aber das wars auch schon.
    Für ordentliche Verarbeitung sind typisierte DataTables ungleich besser, weil da kann man die ganze Sprache vb.net in Anschlag bringen, inklusive Syntax-Überprüfung durch den Compiler.

    langer Rede kurzer Sinn: DataTable.Select() ist für den Programmierer unnütz. Ist vermutlich nötig im Zusammenhang mit anderer Funktionalität (BindingSources, DataViews), aber die direkte Verwendung ist keine gute Idee.
    Da wäre zB Linq.Select um Welten besser.
    Aber um Lücken in einer Chronologie aufzufinden (bzw. zusammenhängende Datensätze zu mergen) wüsste ich jetzt auch Linq nicht wirklich überzeugend einzusetzen.
    Sondern wie bereits gesagt wurde: gute alte For-Schleifen, oder evt. ForEach.
    In SQL wäre das auch relativ einfach machbar(Also ist schon ein Fortgeschrittenes Query mit Subselect und Over Klauseln usw). Aber ka wie du den DataTable befüllst. Daher ist vermutlich For Each das Beste.

    ErfinderDesRades schrieb:

    Die DataTable.Select-Methode darf man nicht mit Sql-Select verwechseln.


    Hat doch keiner damit verwechselt. Auf was ist das bezogen?
    Das ist meine Signatur und sie wird wunderbar sein!
    Ok danke, dann wäre das ja geklärt, es ist also schwierig bis unmöglich es mit dem Datatable.Select zu ermitteln. :D
    Danke.

    Aber nochmal eben zur Info, ich weiß ja, dass EDR gerne immer wieder mit den typisisierten DataSets anfängt, aber weder die DatenStrucktur noch die Methode, die mir die DataRows zurückgibt, ist meine.
    Zudem hantieren hier eher mit Models, die die Datenhaltung übernehmen.

    Was ich noch überlege, wo hab ich denn in Post#1 etwas von SQL Select gesagt? ;)
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de