Estenda DataTable em c #
Um construtor estático para classeSourceManager
percorre todos os módulos / classes e descobre todas as classes que implementamISource
. Ele irá instanciar cada um deles e expor umIEnumerable
deles como uma propriedade estática chamadaIEnumerable<ISource> Sources
. Pela simplicidadeISource
tem duas propriedades,DataTable Table { get; }
estring UniqueName { get; }
. Quando instanciado cada diferenteISource
é responsável por preencher suaTable
de SQL, MDX, etc. Para todos osISource
eu escrevi até agora, carregando oTable
com tudoDataRow
s quando instanciado foi suficiente. ContudoAgora tenho uma situação em que gostaria de carregar oTable
comDataRow
é preguiçoso, ao invés de tudo na frente. Como eu faço isso? Eu andarei através de um exemplo.
PermissionSource
implementaISource
. EstáTable
propriedade, que tem umprivate set
é dado um valor denew PermissionDataTable()
. EstáUniqueName
é"Permissions"
. A partir de agora não há permissões carregadas do banco de dados para esteTable
propriedade.
ISource permissionSource = SourceManager.Sources.
Where(s => "Permission".Equals(s.UniqueName)).First();
Agora nós obtivemos oPermissionSource
, mas através de uma interface. Vamos obter uma permissão.
DataRow row = permissionSource.Table.Rows.Cast<DataRow>().
Where(r => r["PermissionName"].Equals("PermissionName")).First()
Eu cancelei oRows
propriedade emPermissionDataTable
de modo que o acima, de alguma forma, obtém o valor das permissões associadas"PermissionName"
no banco de dados. Outras permissões não são carregadas.
Eu não tenho escolha no sistema de permissões e não tenho escolha para não usar umDataTable
.
EDITAR:
No meu exemplo, eu precisaria substituir oRows
propriedade deDataTable
. Rows
, no entanto, é umDataRowCollection qual ésealed
. Portanto, não há muito que possa ser feito em termos de criação de uma implementação DataTable personalizada mínima, como eu quero fazer.