Rozszerz DataTable w C #

Konstruktor statyczny dla klasySourceManager&nbsp;przechodzi przez wszystkie moduły / klasy i odkrywa wszystkie klasy, które implementująISource. Utworzy instancję każdego z nich i wyeksponujeIEnumerable&nbsp;z nich jako właściwość statyczna o nazwieIEnumerable<ISource> Sources. Dla prostotyISource&nbsp;ma dwie właściwości,DataTable Table { get; }&nbsp;istring UniqueName { get; }. Gdy każda instancja jest innaISource&nbsp;jest odpowiedzialny za wypełnianie jejTable&nbsp;z SQL, MDX itp. Dla wszystkichISourcenapisałem do tej pory, ładujęTable&nbsp;ze wszystkimiDataRows, gdy wystąpienie jest wystarczające. jednakMam teraz sytuację, w której chciałbym załadowaćTable&nbsp;zDataRowjest leniwie, a nie z przodu. Jak mam to zrobic?&nbsp;Przejdę przez przykład.

PermissionSource&nbsp;narzędziaISource. JegoTable&nbsp;własność, która maprivate set&nbsp;otrzymuje wartośćnew PermissionDataTable(). JegoUniqueName&nbsp;jest"Permissions". W tej chwili nie ma żadnych uprawnień załadowanych z bazy danych do tegoTable&nbsp;własność.

ISource permissionSource = SourceManager.Sources.
    Where(s => "Permission".Equals(s.UniqueName)).First();

Teraz otrzymaliśmyPermissionSource, ale przez interfejs. Zdobądźmy pozwolenie.

DataRow row = permissionSource.Table.Rows.Cast<DataRow>().
    Where(r => r["PermissionName"].Equals("PermissionName")).First()

PrzesłoniłemRows&nbsp;nieruchomość wPermissionDataTable&nbsp;aby powyższy sposób w jakiś sposób uzyskał wartość uprawnień związanych z"PermissionName"&nbsp;w bazie danych. Inne uprawnienia nie są ładowane.

Nie mam wyboru w systemie uprawnień i nie mam wyboru, aby nie używaćDataTable.

EDYTOWAĆ:

W moim przykładzie musiałbym nadpisaćRows&nbsp;własnośćDataTable. Rowsjest jednakDataRowCollection&nbsp;który jestsealed. W związku z tym nie można zrobić wiele, jeśli chodzi o tworzenie minimalnej niestandardowej implementacji DataTable, jak chcę to zrobić.