una tabla registros obtener numero net filas datos contar con como columnas c# datatable count criteria

c# - tabla - obtener datos de un datatable jquery



Obtener un recuento de filas en una tabla de datos que cumpla con ciertos criterios (7)

Tengo una tabla de datos, dtFoo, y me gustaría obtener un recuento de las filas que cumplen con ciertos criterios.

EDITAR: Estos datos no se almacenan en una base de datos, por lo que usar SQL no es una opción.

En el pasado, he usado los siguientes dos métodos para lograr esto:

Método 1

int numberOfRecords = 0; DataRow[] rows; rows = dtFoo.Select("IsActive = ''Y''"); numberOfRecords = rows.Length; Console.WriteLine("Count: " + numberOfRecords.ToString());

Método 2

int numberOfRecords = 0; foreach (DataRow row in dtFoo.Rows) { if (row["IsActive"].ToString() == "Y") { numberOfRecords++; } } Console.WriteLine("Count: " + numberOfRecords.ToString());

Mi tienda está tratando de estandarizarse en algunas cosas y este es un problema que ha surgido. Me pregunto cuál de estos métodos es el mejor en términos de rendimiento (¡y por qué!), Así como cuál es el más comúnmente utilizado.

Además, ¿hay mejores formas de lograr los resultados deseados?


No estoy seguro si esto es más rápido, pero al menos es más corto :)

int rows = new DataView(dtFoo, "IsActive = ''Y''", "IsActive", DataViewRowState.CurrentRows).Table.Rows.Count;


Prueba esto

int numberOfRecords = dtFoo.Select("IsActive = ''Y''").Count<DataRow>(); Console.WriteLine("Count: " + numberOfRecords.ToString());


Si los datos se almacenan en una base de datos, será más rápido enviar la consulta a la base de datos en lugar de obtener todos los datos y consultarlos en la memoria.

Una tercera forma de hacerlo será mediante linq para los conjuntos de datos, pero dudo que alguno de estos 3 métodos difiera mucho en rendimiento.


Una forma fácil de lograr esto es combinar lo que se publicó en la publicación original en una sola declaración:

int numberOfRecords = dtFoo.Select("IsActive = ''Y''").Length;

Otra forma de lograr esto es usar los métodos de Linq:

int numberOfRecords = dtFoo.AsEnumerable().Where(x => x["IsActive"].ToString() == "Y").ToList().Count;

Tenga en cuenta que esto requiere incluir System.Linq .


int numberOfRecords = 0; numberOfRecords = dtFoo.Select().Length; MessageBox.Show(numberOfRecords.ToString());


int numberOfRecords = DTb.Rows.Count; int numberOfColumns = DTb.Columns.Count;


object count =dtFoo.Compute("count(IsActive)", "IsActive=''Y''");