(Moderator)
Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
|
AW: Array füllen mit Daten aus Datenbank (Join)
12. Nov 2016, 18:49
Also, wenn ich dem Tag das C# korrekt entnehme, dann würde ich folgendes machen. Das ganze kannst Du 1:1 in LinqPad als C# Program reinwerfen und ausprobieren:
Code:
class Kopfdatum
{
public int Id { get; set; }
public DateTime Date { get; set; }
}
class Prozessdatum
{
public int KopfId { get; set; }
public string Name { get; set; }
public double Value { get; set; }
}
class Data
{
public string Name { get; set; }
public double Value { get; set; }
}
void Main() {
Kopfdatum[] Kopfdaten = {
new Kopfdatum() { Id = 1, Date = new DateTime(2016, 11, 12) },
new Kopfdatum() { Id = 2, Date = new DateTime(2016 ,11, 13) },
};
Prozessdatum[] Prozessdaten = {
new Prozessdatum() { KopfId = 1, Name = "Kraft", Value = 10 },
new Prozessdatum() { KopfId = 1, Name = "Druck", Value = 2 },
new Prozessdatum() { KopfId = 1, Name = "Temp", Value = 22 },
new Prozessdatum() { KopfId = 2, Name = "Geschwindigkeit", Value = 110 },
};
// Das hier ergibt das, was Du nach einem Join hast:
var zwischenErgebnis = Prozessdaten
.Join(Kopfdaten,
p => p.KopfId,
k => k.Id,
(p, k) => new { KopfId = k.Id, KopfDatum = k.Date, ProzessName = p.Name, ProzessWert = p.Value }
);
// wenn in LinqPad ausgeführ macht das hier ne Zwischenausgabe :)
zwischenErgebnis.Dump();
var result = zwischenErgebnis
.GroupBy(z => z.KopfId)
.ToDictionary( // hier kommen die Gruppen rein
group => group.Key,
group => group.Select(
i => new Data() { Name = i.ProzessName, Value = i.ProzessWert }
).ToList()
);
result.Dump();
// oder, in einem Rutsch:
result = Prozessdaten
.Join(Kopfdaten,
p => p.KopfId,
k => k.Id,
(p, k) => new { Id = k.Id, Val = new Data() { Name = p.Name, Value = p.Value } })
.GroupBy(j => j.Id)
.ToDictionary(
g => g.Key,
g => g.Select(v => v.Val).ToList()
);
result.Dump();
}
|