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 osISourceeu escrevi até agora, carregando oTable com tudoDataRows 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.

questionAnswers(4)

yourAnswerToTheQuestion