DataTable in C # erweitern
Ein statischer Konstruktor für die KlasseSourceManager
Durchläuft alle Module / Klassen und entdeckt alle Klassen, die implementiert werdenISource
. Es instanziiert jeden von diesen und macht einen sichtbarIEnumerable
von ihnen als statische Eigenschaft bezeichnetIEnumerable<ISource> Sources
. Der Einfachheit halberISource
hat zwei Eigenschaften,DataTable Table { get; }
undstring UniqueName { get; }
. Wenn jeder anders instanziiertISource
ist verantwortlich für die Besiedlung seinerTable
von SQL, MDX usw. Für alleISource
hab ich bisher geschrieben, lade dasTable
mit allenDataRow
s wenn instantiiert war ausreichend. jedochIch habe jetzt eine Situation, in der ich das laden möchteTable
mitDataRow
ist eher faul als alle vorne. Wie mache ich das? Ich werde ein Beispiel durchgehen.
PermissionSource
implementiertISource
. Es istTable
Eigentum, das hat eineprivate set
erhält einen Wert vonnew PermissionDataTable()
. Es istUniqueName
ist"Permissions"
. Ab sofort sind keine Berechtigungen aus der Datenbank in diese geladenTable
Eigentum.
ISource permissionSource = SourceManager.Sources.
Where(s => "Permission".Equals(s.UniqueName)).First();
Jetzt haben wir die erhaltenPermissionSource
, aber über eine Schnittstelle. Lassen Sie uns eine Erlaubnis bekommen.
DataRow row = permissionSource.Table.Rows.Cast<DataRow>().
Where(r => r["PermissionName"].Equals("PermissionName")).First()
Ich habe die überschriebenRows
Eigentum inPermissionDataTable
so dass das Obige irgendwie den Wert der Berechtigungen erhält, die damit verbunden sind"PermissionName"
in der Datenbank. Andere Berechtigungen werden nicht geladen.
Ich habe im Berechtigungssystem keine Wahl und ich habe keine Wahl, a nicht zu verwendenDataTable
.
BEARBEITEN:
In meinem Beispiel müsste ich die überschreibenRows
Eigentum vonDataTable
. Rows
ist jedoch einDataRowCollection welches istsealed
. Daher kann nicht viel getan werden, um eine minimale benutzerdefinierte DataTable-Implementierung zu erstellen, wie ich es möchte.