pasar objects not dynamically convert available c# list datatable ienumerable

c# - objects - datatable asenumerable not available



Tablas de datos vs IEnumerable<T> (5)

Encontré que con tablas grandes a través de SQL, la tabla de datos era mucho más rápida en lugar de IEnumerable. Volcé una tabla con 26k filas con 25 columnas en una sola página HTML. Datable en 3 segundos, IEnumerable tomó 9 segundos. Yo voto DataTable. Todos los códigos son idénticos excepto el tipo.

Estoy teniendo un debate con otro programador con el que trabajo.

Para un tipo de retorno de base de datos, ¿existen diferencias significativas en el uso o la memoria, u otras desventajas que deberían hacer que alguien evite usar los conjuntos de datos y tablas de datos y los tipos de favor que implementan IEnumerable<T> ... o viceversa?

Prefiero devolver los tipos que implementan IEnumerable<T> ( List<T>, T[] etc ) porque es más liviano, está muy tipeado en el objeto al acceder a las propiedades, permite una información más completa sobre el tipo subyacente, etc. configurar aunque al usar manualmente el lector de datos.

¿Es la única razón para usar DataTables en estos días solo la pereza?


Las tablas de datos son definitivamente mucho más pesadas que las listas, tanto en requisitos de memoria como en tiempo de procesador invertido en crearlas / completarlas.
Usar un DataReader es considerablemente más rápido (aunque más detallado) que usar DataTables (supongo que estás usando un DataAdapter para llenarlos).

Dicho esto ... A menos que esto sea en algún lugar donde realmente importa, probablemente estés bien de cualquier manera, y ambos métodos serán lo suficientemente rápidos, así que solo ve con lo que sea más cómodo en cada caso. (A veces desea rellenarlos con poco código, a veces desea leerlos con poco código)

Yo mismo tiendo a usar solo DataTables cuando estoy enlazando a un GridView, o cuando necesito más de un conjunto de resultados activo al mismo tiempo.


Otra ventaja de usar las clases System.Collections es que obtiene mejores opciones de clasificación y búsqueda. No conozco ninguna forma razonable de modificar la forma en que un DataTable clasifica o busca; con las clases de recopilación que acaba de hacer que su clase implemente IComparable o IEquatable y puede personalizar completamente el funcionamiento de List.Sort y List.Contains.

Además, con las listas no tiene que preocuparse por DBNull, que me ha disparado en más de una ocasión porque esperaba nulo y obtuve DBNull.


También me gusta el hecho con IEnumerable<T> que puede mejorar el tipo subyacente de la colección con métodos y propiedades, lo que hace que la implementación sea mucho más elegante y que el código sea más fácil de mantener. Por ejemplo, la propiedad FullName. También puede agregar métodos de extensión a la clase si está fuera de su control.

public class SomeUser { public string FirstName { get; set; } public string LastName { get; set; } public string FullName { get { return String.Format("{0} {1}", FirstName, LastName); } } }


Usar DataTables directamente significa vincularse con la fuente de datos subyacente y con la forma en que se presenta. Esto no es bueno desde el punto de vista de la mantenibilidad. Si todas sus necesidades de visualización son una lista de algunos objetos, eso es todo lo que debe dar.