Hallo zusammen,
ich habe folgende Datenbanktabellen, bei denen die Datensätze der Prozessdaten über die Kopf-ID mit der Kopfdaten-ID verknüpft sind:
Kopfdaten:
Code:
ID Datum ...
1 12.11.16
2 13.11.16
Prozessdaten:
Code:
Kopf-ID Name Value
1 Kraft 10
1 Druck 2
1 Temp 22
2 Geschw. 110
Ich möchte diese Daten auslesen und eine Liste damit füllen:
Code:
class Data {
public sting Name;
public double Value;
}
Dictionary<int, List<Data>> result;
Gefüllt soll das so aussehen (Pseuso-Code):
Code:
[1] =>
[
Name = "Kraft"
Value = 10
],
[
Name = "Druck"
Value = 2
],
[
Name = "Temp"
Value = 22
],
[2] =>
[
Name = "Geschw."
Value = 110
],
Nun würde ich gerne wissen, wie man das am besten macht.
Folgende Möglichkeiten fallen mir ein (Pseudo-Code, achtet bitte nicht auf die Syntax o.ä.
)
1. Mehrfache Datenbankabfragen, das sind jedoch u.U. sehr viele
Code:
headData = SELECT * FROM Kopfdaten;
foreach (sHeadData in headData) {
id = sHeadData["ID"];
values = SELECT * FROM Prozessdaten WHERE Kopf-ID = id;
valuesParsed = new List<Data>();
foreach (var sValue in values) {
valuesParsed.Add(
new Data() {
Name = sData["Name"],
Value = sData["Value"],
}
);
}
result.Add(id, valuesParsed);
}
2. Eine Abfrage mittels JOIN
Ich denke von der Abfrage her ist es deutlich schneller, aber die Logik für die Aufbereitung kommt mir eher umständlich vor.
Code:
data = SELECT * FROM Kopfdaten k
INNER JOIN Prozessdaten p
ON k.ID = p.Kopf-ID;
foreach (var sData in data) {
id = sData["ID"];
if (!result.ContainsKey(id)) {
result.Add(id, new List<Data>());
}
result[id].Add(
new Data() {
Name = sData["Name"],
Value = sData["Value"],
}
);
}
Ich hoffe, ihr könnt nachvollziehen worum es mir geht und mit idealerweise nennen, wie man das am besten umsetzt. 2 verknpüfte Tabellen hat man ja meist irgendwo und so außergewöhnlich ist die Aufgabenstellung daher nicht, denke ich.
Wie macht ihr sowas?
Grüße
Matze