Estenda DataTable em c #

Um construtor estático para classeSourceManager&nbsp;percorre todos os módulos / classes e descobre todas as classes que implementamISource. Ele irá instanciar cada um deles e expor umIEnumerable&nbsp;deles como uma propriedade estática chamadaIEnumerable<ISource> Sources. Pela simplicidadeISource&nbsp;tem duas propriedades,DataTable Table { get; }&nbsp;estring UniqueName { get; }. Quando instanciado cada diferenteISource&nbsp;é responsável por preencher suaTable&nbsp;de SQL, MDX, etc. Para todos osISourceeu escrevi até agora, carregando oTable&nbsp;com tudoDataRows quando instanciado foi suficiente. ContudoAgora tenho uma situação em que gostaria de carregar oTable&nbsp;comDataRowé preguiçoso, ao invés de tudo na frente. Como eu faço isso?&nbsp;Eu andarei através de um exemplo.

PermissionSource&nbsp;implementaISource. EstáTable&nbsp;propriedade, que tem umprivate set&nbsp;é dado um valor denew PermissionDataTable(). EstáUniqueName&nbsp;é"Permissions". A partir de agora não há permissões carregadas do banco de dados para esteTable&nbsp;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&nbsp;propriedade emPermissionDataTable&nbsp;de modo que o acima, de alguma forma, obtém o valor das permissões associadas"PermissionName"&nbsp;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&nbsp;propriedade deDataTable. Rows, no entanto, é umDataRowCollection&nbsp;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.