Ich empfehle die Gruppierung das Ergebnis von der DataSeriesId
.
var groupedResult = QueryDatabase().GroupBy(item => item.DataSeriesId);
Jetzt können Sie wie folgt auf die gruppierten Daten zugreifen. In diesem Beispiel werden nur alle Gruppen mit allen Elementen gedruckt.
foreach(var group in groupedResult)
{
Console.WriteLine("Group: " + group.Key);
foreach(var item in group)
{
Console.WriteLine(" Item: " + item);
}
}
Oder Sie können das Ergebnis der Datenbankabfrage in eine Liste von Listen gruppieren.
IList<IList<DataItem>> = QueryDatabase()
.GroupBy(item => item.DataSeriesId)
.Select(group => group.ToList())
.ToList();
Oder Sie können ein Wörterbuch von DataSeriesId
auf eine Liste von Datenelementen aus der Datenbank Abfrageergebnis bauen.
IDictionary<Int32, IList<DataItem>> = QueryDatabase()
.GroupBy(item => item.DataSeriesId)
.ToDictionary(group => group.DataSeriesId, group => group.ToList());
Oder Enumerable.ToLookUp()
verwenden, wenn Sie das Wörterbuch nicht später ändern wollen.
UPDATE
bemerkt einfach die "Best Practice" in der Frage einer der "Datareader" -Tag. Nun, LINQ ist einfach zu schreiben und leicht zu bekommen, aber es ist wahrscheinlich nicht die schnellste Lösung. Je nach Ihren Anforderungen kann die Verwendung von LINQ eine gute oder schlechte Wahl sein. Ich würde LINQ bevorzugen, wenn Leistung (noch) kein Problem ist. Sonst würde ich ein Wörterbuch von DataSeriesId
zu einer Liste von Datenelementen beim Lesen der Daten erstellen.
IDictionary<Int32, IList<DataItem>> result =
new Dictionary<Int32, IList<DataItem>>();
while (dataSource.DataAvailiable)
{
DataItem item = dataSource.ReadItem();
IList<DataItem> items;
if (!result.TryGetValue(item.DataSeriesId))
{
items = new List<DataItem>();
result.Add(item.DataSeriesId, items);
}
items.Add(item);
}