[ Foro de C# ]

Obtener los "n" registros maximos de un Datatable en C# según un campo DateTime

14-Nov-2014 18:23
Invitado (usielmtz)
1 Respuestas

Hola buen día...empiezo con esto de la programación y tengo un par de dudas.
Me recomendaron el foro y pues por eso vengo a ustedes.
De un DataTable quiero obtener (por ejemplo) los dos registros con la fecha más reciente, tengo esto (obtengo solo 1 registro, el más reciente):

 
 DataTable table = new DataTable("Players");
            table.Columns.Add(new DataColumn("Date", typeof(DateTime)));
            table.Columns.Add(new DataColumn("Sex", typeof(char)));
            table.Rows.Add("30-12-2017", 'f');
            table.Rows.Add("30-12-2011", 'f');
            table.Rows.Add("30-12-2014", 'm');
            table.Rows.Add("30-12-2019", 'm');
            table.Rows.Add("30-12-2018", 'm');
            DataRow[] custRows = table.Select("Date=MAX(Date) ", "Date DESC");
            foreach (DataRow row in custRows)
            {
                Console.WriteLine("{0}, {1}", row[0], row[1]);
            }
            Console.Read();
 


MI PREGUNTA: ¿Cómo puedo obtener más de un registro máximo??


16-Nov-2014 12:24
Nacho Cabanes (+31)

Siendo estrictos, el primer parámetro de "Select" (en el formato que tú estás usando) es el criterio de búsqueda, y el segundo es el criterio de ordenación.

Si usas "Date=MAX(Date)" como criterio de búsqueda, no obtendrás el último registro, sino todos aquellos que sean del último día. En este caso, dará igual el criterio de ordenación que hayas puesto, porque sólo se tomarán los del último día, y no se avanzará más.

Puedes cambiar el criterio de búsqueda para que sea más amplio, conservar el criterio de ordenación, para que los datos se obtengan desde el más reciente hasta el más antiguo ("Date DESC"), y entonces iterar por los datos, bien a mano o bien usando LINQ con una orden como

 
table.AsEnumerable().Take(5);
 









(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)