Linq, Spalten bei Group-By dazujoinen

Gast #5856828
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)
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
#5856937
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:
1
var result = data.GroupBy(
2
    r => r.SpalteA,
3
    (key, elems) => elems.OrderByDescending(e => e.Datum).First()
4
);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren