none
LinQ: DataTable aus Join-Query erstellen RRS feed

  • Frage

  • Hallo, tüftle schon wieder etwas länger an einer Abfrage. Ich möchte das Ergebnis gleich als DataTabel wandeln (konvertieren). Wei kann ich das am besten und schnellsten machen?
    var query = from m in MovexScheibeTbl.AsEnumerable()
                                        join t in tbl.AsEnumerable()
                                            on m.Field<string>("Artikelnr") equals t.Field<string>("Systemcode")
                                        //on m["Artikelnr"] equals t["Systemcode"]
    
                                        select new
                                                   {
                                                       AuftragsnummerMovex = m.Field<string>("Artikelnr"),
                                                       Systemcode = t.Field<string>("Systemcode"),
                                                       Kantenradius = t["S1"],
                                                       Breite = t["S2"],
                                                       Scheibennummer = t["S3"],
                                                       Kordel = t["Typ"]
                                                   };
    
    
    //// Das geht nicht, obwhl in einem Forum gezeigt
                        DataTable table = new DataTable();
                        tbl = query.CopyToDataTable();
    Ich habe schon probiert, die query in einer foreach abzuarbeiten und die Rows zu erfassen, aber ich bekomme das nicht hin. Kann mir da jemand helfen?
    Dienstag, 20. März 2012 07:42

Antworten

  • Hallo,

    bei CopyToDataTable findet sich der kleine Hinweis, dass es nur für DataRow Instanzen funktioniert,
    weitere Erläuterungen zu den Ursachen der Einschränkung: Science Project

    Somit muss man schon etwas mehr tun um daraus wieder eine DataTable zu erzeugen.
    Einige Varianten dazu hatte ich mal gezeigt in:LINQ CopytoDataTable
    Das Beispiel ist zwar in VB sollte aber (da fast nur LINQ) für C#'ler verständlich sein.

    Da Du oben nur die Artikelnummer ergänzt, könntest Du auch t (oder eine Kopie davon)
    um die eine Spalte ergänzen und die Daten über eine "konventionelle" Schleife übertragen.

    Gruß Elmar

    Dienstag, 20. März 2012 08:47
    Beantworter
  • Hallo, habe das Problem erledigt. Habe es nun so gemacht wie immer, zwei querys, jedesmal die gesamte Ergebnismenge geholt, die Daten in je ein Tabelle kopiert, in einer Schleife die gemeinsame Tabelle der beiden Tabellen generiert und dann die DataRows der beiden Abfragetabellen über eine SChleife in die vereinte Tabelle eingelagert.
    Dienstag, 20. März 2012 09:56

Alle Antworten

  • Hallo,

    bei CopyToDataTable findet sich der kleine Hinweis, dass es nur für DataRow Instanzen funktioniert,
    weitere Erläuterungen zu den Ursachen der Einschränkung: Science Project

    Somit muss man schon etwas mehr tun um daraus wieder eine DataTable zu erzeugen.
    Einige Varianten dazu hatte ich mal gezeigt in:LINQ CopytoDataTable
    Das Beispiel ist zwar in VB sollte aber (da fast nur LINQ) für C#'ler verständlich sein.

    Da Du oben nur die Artikelnummer ergänzt, könntest Du auch t (oder eine Kopie davon)
    um die eine Spalte ergänzen und die Daten über eine "konventionelle" Schleife übertragen.

    Gruß Elmar

    Dienstag, 20. März 2012 08:47
    Beantworter
  • Hallo, habe das Problem erledigt. Habe es nun so gemacht wie immer, zwei querys, jedesmal die gesamte Ergebnismenge geholt, die Daten in je ein Tabelle kopiert, in einer Schleife die gemeinsame Tabelle der beiden Tabellen generiert und dann die DataRows der beiden Abfragetabellen über eine SChleife in die vereinte Tabelle eingelagert.
    Dienstag, 20. März 2012 09:56