Расширить 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, как я хочу.