Linq, Spalten bei Group-By dazujoinen

Gast #5856828
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)
1
            DataTable td = data.AsEnumerable()
2
                .GroupBy(r => new {
3
                    SpalteA = r["SpalteA"]
4
                })
5
                .Select(g =>
6
                {
7
                    DataRow rw = data.NewRow();
8

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

13
                    return rw;
14
                })
15
                .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
Gast
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.
(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:
1
var result = data.GroupBy(
2
    r => r.SpalteA,
3
    (key, elems) => elems.OrderByDescending(e => e.Datum).First()
4
);

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.