Расширить DataTable в C #

Статический конструктор для классаSourceManager проходит через все модули / классы и обнаруживает все классы, которые реализуютISource, Он будет создавать каждый из них и подвергатьIEnumerable из них в качестве статического свойства под названиемIEnumerable<ISource> Sources, Для простотыISource имеет два свойства,DataTable Table { get; } а такжеstring UniqueName { get; }, Когда создаются каждый другойISource отвечает за заселение егоTable из SQL, MDX и т. д. Для всехISource"Я уже написал, загружаяTable со всемDataRowс момента его создания было достаточно. тем не мениеI now have a situation where I'd like to load the Table with DataRow's lazily, rather than all up front. How do I do this?  Я пойду через пример.

PermissionSource инвентарьISource, этоTable свойство, которое имеетprivate set дается значениеnew PermissionDataTable(), этоUniqueName является"Permissions", На данный момент нет никаких разрешений, загруженных из базы данных в этотTable имущество.

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

Теперь мы получилиPermissionSource, но через интерфейс. Позвольте нам получить разрешение.

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

Я переопределилRows недвижимость вPermissionDataTable так что выше, так или иначе, получает значение разрешений, связанных с"PermissionName" в базе данных. Другие разрешения не загружены.

У меня нет выбора в системе разрешений, и у меня нет выбора не использоватьDataTable.

EDIT:

В моем примере мне нужно переопределитьRows собственностьюDataTable. Rowsтем не менее, являетсяDataRowCollection которыйsealed, Таким образом, не так много можно сделать с точки зрения создания минимальной пользовательской реализации DataTable, как я хочу.

Ответы на вопрос(4)

Ваш ответ на вопрос