Extienda DataTable en C #

Un constructor estático para la clase.SourceManager Recorre todos los módulos / clases y descubre todas las clases que implementanISource. Se instanciará cada uno de estos y expondrá unIEnumerable de ellos como una propiedad estática llamadaIEnumerable<ISource> Sources. Por simplicidadISource tiene dos propiedades,DataTable Table { get; } ystring UniqueName { get; }. Cuando se crea una instancia de cada diferenteISource es responsable de poblar suTable desde SQL, MDX, etc. Para todos losISource's he escrito hasta ahora, cargando elTable con todaDataRows cuando instanciado ha sido suficiente. sin embargoAhora tengo una situación en la que me gustaría cargar elTable conDataRowEs perezoso, en lugar de todo por adelantado. ¿Cómo hago esto? Voy a caminar a través de un ejemplo.

PermissionSource implementosISource. SusTable propiedad, que tiene unaprivate set se le da un valor denew PermissionDataTable(). SusUniqueName es"Permissions". A partir de ahora no hay permisos cargados de la base de datos en esteTable propiedad.

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

Ahora hemos obtenido elPermissionSource, pero a través de una interfaz. Vamos a obtener un permiso.

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

He anulado laRows propiedad enPermissionDataTable de modo que lo anterior, de alguna manera, obtiene el valor de los permisos asociados con"PermissionName" en la base de datos Otros permisos no están cargados.

No tengo una opción en el sistema de permisos y no tengo una opción para no usar unDataTable.

EDITAR:

En mi ejemplo necesitaría anular elRows propiedad deDataTable. Rows, aunque, es unDataRowCollection cual essealed. Por lo tanto, no hay mucho que se pueda hacer en términos de crear una implementación de DataTable personalizada mínima, como quiero hacer.

Respuestas a la pregunta(4)

Su respuesta a la pregunta