Wenn Sie sich nicht für einfache Klassen (POCO usw.) entscheiden, wird Ihre eigene Implementierung wahrscheinlich fast so viel Overhead haben wie DataTable
. Ich persönlich würde eher auf Tools wie LINQ-to-SQL, Entity Framework usw. zurückgreifen. Dann können Sie entweder LINQ-to-Objects gegen lokale Daten oder die anbieterspezifische Implementierung für komplexe Datenbankabfragen verwenden, ohne alle Daten auf den Client zu ziehen.
LINQ-to-Objects kann do all die von Ihnen erwähnten Dinge, aber es geht darum, alle Daten im Speicher zu haben. Wenn Sie nicht-triviale Daten haben, wird eine Datenbank empfohlen. SQL Server Express Edition wäre ein guter Ausgangspunkt, wenn Sie sich mit LINQ-to-SQL oder Entity Framework beschäftigen.
Geändert in Bezug auf den Kommentar:
Normale TSQL-Befehle sind schön und gut, aber Sie fragen nach dem Unterschied... der größte ist, dass LINQ-to-SQL die gesamte DAL für Sie bereitstellt, was eine enorme Zeitersparnis bedeutet und außerdem eine viel größere Sicherheit bei der Kompilierung ermöglicht. Aber es erlaubt Ihnen auch, den gleichen Ansatz zu verwenden, um Ihre lokalen Objekte und Ihre Datenbank zu betrachten - zum Beispiel ist das folgende gültig C# 3.0 (außer für [someDataSource], siehe unten):
var qry = from row in [someDataSource]
group row by row.Category into grp
select new {Category = grp.Key, Count = grp.Count(),
TotalValue = grp.Sum(x=>x.Value) };
foreach(var x in qry) {
Console.WriteLine("{0}, {1}, {2}", x.Category, x.Count, x.TotalValue);
}
Wenn es sich bei [someDataSource] um lokale Daten handelt, z. B. um eine List<T>
Wenn es sich jedoch um einen LINQ-to-SQL-Datenkontext handelt, kann es das entsprechende TSQL auf dem Datenbankserver erstellen. Dies macht es möglich, einen einzigen Abfragemechanismus in Ihrem Code zu verwenden (innerhalb der Grenzen von LOLA natürlich).