Rozszerz DataTable w C #

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

PermissionSource narzędziaISource. JegoTable własność, która maprivate set otrzymuje wartośćnew PermissionDataTable(). JegoUniqueName jest"Permissions". W tej chwili nie ma żadnych uprawnień załadowanych z bazy danych do tegoTable 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 nieruchomość wPermissionDataTable aby powyższy sposób w jakiś sposób uzyskał wartość uprawnień związanych z"PermissionName" 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 własnośćDataTable. Rowsjest jednakDataRowCollection 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ć.

questionAnswers(4)

yourAnswerToTheQuestion