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 alleISourcehab ich bisher geschrieben, lade dasTable mit allenDataRows wenn instantiiert war ausreichend. jedochIch habe jetzt eine Situation, in der ich das laden möchteTable mitDataRowist 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. Rowsist jedoch einDataRowCollection welches istsealed. Daher kann nicht viel getan werden, um eine minimale benutzerdefinierte DataTable-Implementierung zu erstellen, wie ich es möchte.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage