none
Suche bessere Lösung für die LINQ-Abfrage? RRS feed

  • Frage

  • Hallo,
    bestimmte Werte vom Ergebnis einer Abfrage auf eine DataTable will ich in einer anderen DataTable speichern.
    Der unten stehende Code funktioniert.
    Mir scheint die Lösung mit .ToList().ForEach aber etwas umständlich. Wahrscheinlich kostet das Umwandeln in eine Liste auch unnötig Zeit.
    Gibt es eine bessere (schnellere) Lösung?

    Alexander

    dataTable.AsEnumerable().Where(r => r.Field<string>("TYPE") == "Operation" && r.Field<DateTime>("START") >= dateFrom).OrderBy(r => r.Field<DateTime>("START")).ToList().ForEach(r =>
     {
      this.AddDataRow(r.Field<DateTime>("START"), r.Field<DateTime>("STARTTIME"), r.Field<string>("COLOR"));
     });
    Montag, 29. Oktober 2018 16:59

Antworten

  • Hi Alexander,
    hier mal eine Konsolen-Demo, wie man das machen könnte:

    using System;
    using System.Data;
    using System.Linq;
    
    namespace ConsoleApp1
    {
      class Program51
      {
        static void Main(string[] args)
        {
          try
          {
            Demo c = new Demo();
            c.Execute();
          }
          catch (Exception ex) { Console.WriteLine(ex.ToString()); }
          Console.WriteLine("Fertig, Abschluss mit beliebiger Taste");
          Console.ReadKey();
        }
    
        class Demo
        {
          internal void Execute()
          {
            // Ausgangsdaten
            DataTable dataTable = new DataTable();
            dataTable.Columns.Add("TYPE", typeof(string));
            dataTable.Columns.Add("START", typeof(DateTime));
            dataTable.Columns.Add("STARTTIME", typeof(DateTime));
            dataTable.Columns.Add("COLOR", typeof(string));
            dataTable.Rows.Add("Operation", DateTime.Parse("24.03.2018"), DateTime.Parse("24.03.2018"), "A");
            dataTable.Rows.Add("Operation", DateTime.Parse("24.03.2018"), DateTime.Parse("24.03.2018"), "A");
            dataTable.Rows.Add("Operation", DateTime.Parse("24.03.2018"), DateTime.Parse("24.03.2018"), "A");
            dataTable.Rows.Add("Operation", DateTime.Parse("25.03.2018"), DateTime.Parse("24.03.2018"), "A");
            dataTable.Rows.Add("Operation", DateTime.Parse("25.03.2018"), DateTime.Parse("24.03.2018"), "A");
            dataTable.Rows.Add("Operation", DateTime.Parse("26.03.2018"), DateTime.Parse("24.03.2018"), "A");
            dataTable.Rows.Add("Operation", DateTime.Parse("27.03.2018"), DateTime.Parse("24.03.2018"), "A");
            dataTable.Rows.Add("Operation", DateTime.Parse("27.03.2018"), DateTime.Parse("24.03.2018"), "A");
            dataTable.Rows.Add("Operation", DateTime.Parse("28.03.2018"), DateTime.Parse("24.03.2018"), "A");
            //
            DataTable dataTable2 = new DataTable();
            dataTable2.Columns.Add("START", typeof(DateTime));
            dataTable2.Columns.Add("STARTTIME", typeof(DateTime));
            dataTable2.Columns.Add("COLOR", typeof(string));
            //
            DateTime dateFrom = DateTime.Parse("26.03.2018");
            // LinQ
            var res = from r in dataTable.AsEnumerable()
                      where r.Field<string>("TYPE") == "Operation" && r.Field<DateTime>("START") >= dateFrom
                      orderby r.Field<DateTime>("START")
                      select r;
            // anfügen
            foreach (DataRow r in res)
              dataTable2.Rows.Add(r.Field<DateTime>("START"), r.Field<DateTime>("STARTTIME"), r.Field<string>("COLOR"));
            // Kontrolle
            foreach (DataRow item in dataTable2.Rows)
              Console.WriteLine(item["Start"].ToString());
          }
        }
      }
    }


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP für Developer Technologies)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort markiert AlexanderRi Dienstag, 30. Oktober 2018 10:59
    Montag, 29. Oktober 2018 20:08