mikrocontroller.net

Forum: PC-Programmierung Linq, Spalten bei Group-By dazujoinen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: ent (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich stehe vor einen kleinen Problemchen...

ich habe in C# eine DataTable in welcher einige Daten eingefüllt sind. 
Hier mal ein einfacher aufbau

SpalteA; Datum; nochWas; nochWas
Wert1; 1; a; e
Wert2; 2; b; f
Wert1; 3; c; e
Wert3; 4; d; a

In Spalte A, Doppeln sich die Werte, diese möchte ich nach Datum 
ausgefiltert haben (neuester bleibt bestehen)
            DataTable td = data.AsEnumerable()
                .GroupBy(r => new {
                    SpalteA = r["SpalteA"]
                })
                .Select(g =>
                {
                    DataRow rw = data.NewRow();

                    rw["SpalteA"] = g.Key.SpalteA;
                    rw["Datum"] = g.Max(r => r.Field<DateTime>("Datum"));
                    ??? nochWas = selektiere["nochWas"] wenn Datum = g.Max(r => r.Field<DateTime>("Datum")) und SpalteA = g.Key.SpalteA

                    return rw;
                })
                .CopyToDataTable();

mein Ansatz funktioniert, ich bekomme nun meine Werte nicht mehr Doppelt 
und immer das neuste Datum.
Jetzt habe ich aber noch 2 Spalten in welchen die Daten nicht 
"weggruppiert" werden können, da sich diese Unterscheiden.
=> In SQL kann ich jetzt die Daten wieder "dazujoinen" welche sowohl 
SpalteA als auch dem Datum entsprechen, leider weiß ich nicht wie das 
mit Linq geht.

Vielen Dank

Autor: Clemens L. (c_l)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: ent (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nun, entweder hab ichs jetzt zweimal überlesen...

Aber ich habe nicht das Problem einen GroupBy Ausdruck zu machen, 
sondern spalten dazuzujoinen welche nicht eindeutig sind.

Autor: Clemens L. (c_l)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(SpalteA,Datum) ist eindeutig.

Aber der Join nur in SQL notwendig; in C# gibt dir GroupBy() eh alle 
Elemente der Gruppe zurück, aus denen du dann das Element mit dem 
größten Wert auswählen kannst:
var result = data.GroupBy(
    r => r.SpalteA,
    (key, elems) => elems.OrderByDescending(e => e.Datum).First()
);

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.