2010-05-07 19 views
24

¿Cómo se seleccionan las primeras n filas de una tabla de datos/vista de datos en ASP.NET? Actualmente estoy usando el siguiente código, pasando la tabla y el número de filas para obtener los registros. ¿Hay una mejor manera?Cómo seleccionar las primeras n filas de una tabla de datos/vista de datos en ASP.NET

public DataTable SelectTopDataRow(DataTable dt, int count) 
{ 
    DataTable dtn = dt.Clone(); 
    for (int i = 0; i < count; i++) 
    { 
     dtn.ImportRow(dt.Rows[i]); 
    } 

    return dtn; 
} 
+2

¿Todavía está buscando una respuesta satisfactoria para su búsqueda? De lo contrario, puede indicar el que cumpla con sus expectativas. – Kangkan

Respuesta

34

En Framework 3.5, dt.Rows.Cast<System.Data.DataRow>().Take(n)

lo contrario, la forma en que mencionado

+0

+1 bastante buena manera me gustó esto – Devjosh

+1

Esto todavía recuperar todos los datos de la base de datos. Limitar el número de filas en la consulta puede mejorar el rendimiento al tiempo que se evita la carga innecesaria de datos y el uso de la memoria. – Kangkan

3

Se puede modificar la consulta. Si está utilizando SQL Server en la parte posterior, puede usar la consulta Select top n para dicha necesidad. Los implementos actuales captan toda la información de la base de datos. Seleccionar solo el número requerido de filas le dará un aumento de rendimiento también.

22

Acabo de utilizar la respuesta de Midhat pero anexé CopyToDataTable() al final.

El siguiente código es una extensión de la respuesta que utilicé para habilitar rápidamente algunas páginas.

int pageNum = 1; 
int pageSize = 25; 

DataTable dtPage = dt.Rows.Cast<System.Data.DataRow>().Skip((pageNum - 1) * pageSize).Take(pageSize).CopyToDataTable(); 
+0

Este es bueno para paginación. – Kangkan

+0

Si vinculamos esto a un datagridview, una acción de actualización no funcionará correctamente. – Thunder

18
myDataTable.AsEnumerable().Take(5).CopyToDataTable() 
0
public DataTable TopDataRow(DataTable dt, int count) 
    { 
     DataTable dtn = dt.Clone(); 
     int i = 0; 
     foreach (DataRow row in dt.Rows) 
     { 
      if (i < count) 
      { 
       dtn.ImportRow(row); 
       i++; 
      } 
      if (i > count) 
       break; 
     } 
     return dtn; 
    } 
+2

Considere incluir cierta información sobre su respuesta, en lugar de solo publicar el código. Intentamos proporcionar no solo 'soluciones', sino también ayudar a las personas a aprender. Debe explicar qué sucedió en el código original, qué hizo de manera diferente y por qué funcionó su (s) cambio (s). –

Cuestiones relacionadas