Laden...
E
Emskop myCSharp.de - Member
Elektrotechnikermeister Emsland Dabei seit 13.11.2020 3 Beiträge
Benutzerbeschreibung

Forenbeiträge von Emskop Ingesamt 3 Beiträge

18.11.2020 - 08:12 Uhr

vorab ich bin noch blutiger Anfänger im Prozess Learning by doing.

mein vorhaben:

ich bekomme Anlagendaten aus einer Datenbank, Geschwindigkeiten usw. diese versuche ich momentan per C# auszuwerten Produktionszeiten, Nutzeffekt, prozentuale Stillstände und deren Gründe ...

Die Daten werden nur bei Zustandsänderungen in die DB geschriebn.

Daher lade ich mir die Daten für einen gewissen Zeitraum und muss den ersten und den letzten Datenpunkt ergänzen. Um sauber rechnen zu können.

Der letzte Datenpunkt innerhalb des Zeitraumes der SQL Datenbak entspricht dem Zustand des Endzeitpunktes meiner Auswertung daher wollte ich diesen in eine seperate Liste kopieren und den Zeitstempel ändern um danach beide Listen zusammen zu führen.

Und dann mit der Zusammengeführetn Liste zu Arbeiten.

Ich bin das Problem jetzt umganagen indem ich mir nur den benötigenten Datensatz aus der DB in eine neu erstellte Liste Lade.

cloneItem scheint der richtige weg zu sein allerdings möchte ich an der Klasse QHMI_DATALOG_CS momentan ungern was ändern, da diese an vielen stellen verwendet wird.

Danke für die schnellen Antworten.

13.11.2020 - 13:28 Uhr

Moin Alf Ator,

danke für die schnelle antwort.

Jetzt stellt sich mir die Frage ob ich die Daten auf den der Reference Type zeigt irgend wie duplizieren kann und mit einer anderen Liste verbinden kann.

Oder ob der einzige weg ist, die Daten erneut aus der SQL-Datenbank zu Laden und mit der zweiten Liste zu verknüpfen ? Damit ich beide unabhängig voneinander bearbeiten kann.

DieListen habe ich gerade umbenannt:
List_TL_Data (Oroginal Liste)
List_LastData (Liste in der ein Teil der oroginal Liste gespeichert und bearbeitet werden soll ohen die oroginal Liste zu verändern)

Gruß
Emskop

13.11.2020 - 09:51 Uhr

Ich möchte einen Index aus einer Liste kopieren und diesen dann nur in der Kopie verändern ohne das die Oroginal Liste verändert wird.

Das einzige was ich bisher gefunden haben ist der unten beschrieben weg zum kopieren der Klasse habe die unabhängigkeit der beiden Liste über den jetzt auskommentierten remove befehl getest.

Wenn ich aber LastData[0].TS mit einem anderen Wert beschreibe wird Lst_TL_Data[0].TS auch mit geändert.

Habe das ganze vorher übder den Add befehl versucht welcher aber scheinbar nur die Referenz kopiert ?

Zudem wäre es schön, nur den benötigten Datensatz über den index in die neue liste zu kopieren.


public class QHMI_DATALOG_CS
    {
        public int ID { get; set; }

        public DateTime TS { get; set; }

        public string DATASOURCE { get; set; }

        public string DATATYPE { get; set; }
        public string VARNAME { get; set; }
        public string VALUE { get; set; }

        public string Quality { get; set; }

        public string MESSAGE { get; set; }

}


 

      public void CreateLastTimestamp()
        {
            int n1 = 0;
            LastData.Clear();

            //Kopiere letzten Datensatz aus Lst_TL_Data und füge diesen in LastData ein
            if (Lst_TL_Data.Count > 0)
            {
                // Kompletten Inhalt der liste Kopieren  (nicht nur die Referenz) und in  LastData einfügen
                this.LastData = new List<QHMI_DATALOG_CS>(this.Lst_TL_Data);
                
                // Lösche Datensätze bis auf den letzten
                while(LastData.Count > 1 )
                {
                    LastData.RemoveAt(0);        
                }
            }
        

            if (Lst_TL_Data.Count <= 0)
            {
                // Kompletten Inhalt der liste Kopieren  (nicht nur die Referenz) und in  LastData einfügen
                this.LastData = new List<QHMI_DATALOG_CS>(this.DataFirstPoint);

                // Lösche Datensätze bis auf den letzten
                while (LastData.Count > 1)
                {
                    LastData.RemoveAt(0);
                }
            }

          //  LastData.RemoveAt(0);


            // Soll nur den Zeitstempel der Liste LastData index 0 verändern
            
             LastData[0].TS = dt_Uebergabe_SQL_Ende;
        }