Hallo Eckenbewohner,
ich habe eine DataTable mit einem uint ID als Primärschlüssel. Außerdem gibt es eine Spalte mit einem nicht notwendigerweise eindeutigen string drin.
Ich suche momentan nach einer abstrakten Möglichkeit, Unterkomponenten in meinem Programm ein Mittel zur Verfügung zu stellen, von der ID auf diesen String (ist ein Name für das Element um das es da geht) zu kommen. Abstrakt heißt, ich möchte nicht die Referenz zur DataTable durchreichen und jede Komponente mit den Spalten rumfuhrwerken lassen. Da aber voraussichtlich kaum einmal alle IDs zu Namen aufgelöst werden - und um das auch mal auf die Reihe bekommen zu haben -, wollte ich es außerdem gern mit Lazy Evaluation haben, also nicht einfach nur darüber iterieren und ein Dictionary zusammenbasteln.
Die ILookup Schnittstelle erschien mir nach dem Recherchieren als geeignetes Ziel. Jedoch scheitere ich momentan daran, aus der EnumerableRowCollection einen Lookup herauszubekommen. Laut Dokumentation implementiert ja EnumerableRowCollection (das, was DataTable.AsEnumerable() zurückgibt) IEnumerable. Und alles mit IEnumerable sollte eigentlich um die ToLookup-Methoden erweitert werden. Die EnumerableRowCollection aber anscheinend nicht:
Zitat: |
error CS1061: Type `System.Data.EnumerableRowCollection<System.Data.DataRow>' does not contain a definition for `ToLookup' and no extension method `ToLookup' of type `System.Data.EnumerableRowCollection<System.Data.DataRow>' could be found (are you missing a using directive or an assembly reference?) |
System.Data.DataSetExtensions.dll und System.Core.dll sind referenziert und eine using-Direktive für System.Linq ist auch vorhanden.
Code:
C#-Quelltext
1: 2: 3: 4:
| var lookup = accounts.AsEnumerable() .ToLookup<DataRow, uint, string>( r => r.Field<uint>("ID"), r => r.Field<string>("NAME")); |
Vermutlich mache ich nur irgendetwas falsch, da Linq usw. für mich neu sind... deshalb möchte ich mir gern auf die Sprünge helfen lassen. Falsch ToLookup der falsche Ansatz ist, oder ich am besten ganz anders an die Sache herangehen sollte, ist mir das als Kommentar auch willkommen. Wie gesagt ist die Zielstellung von der ID auf den Namen zu kommen, wobei beide in einer DataTable zusammenliegen, die DataTable aber möglichst nicht einfach weitergereicht werden sollte.
Beste Grüße.