paging dapper

paging - Apuesto. Paginación



dapper (4)

1) Dapper no tiene una función de paginación incorporada. Pero no es demasiado difícil implementarlo directamente en la consulta. Ejemplo:

SELECT * FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY InsertDate) AS RowNum, * FROM Posts WHERE InsertDate >= ''1900-01-01'' ) AS result WHERE RowNum >= 1 // *your pagination parameters AND RowNum < 20 //* ORDER BY RowNum

Requiere SQL Server 2005+

2) Dapper devuelve un IEnumerable<T> .

Estoy intentando Dapper ORM y estoy consultando una tabla de Publicaciones.

Pero me gustaría obtener resultados paginados ...

1 - ¿Cómo puedo hacer esto? ¿No hay un ayudante para esto?

2 - ¿Puede Dapper Query devolver un IQueryable?

Gracias, Miguel


Creé un proyecto de muestra para mostrar la paginación personalizada Dapper, clasificación de soporte, criterios y filtro:

https://github.com/jinweijie/Dapper.PagingSample

Básicamente, el método se ve así:

Tuple<IEnumerable<Log>, int> Find(LogSearchCriteria criteria , int pageIndex , int pageSize , string[] asc , string[] desc);

El primer valor de retorno es la lista de elementos. El segundo valor de retorno es el recuento total.

Espero eso ayude.

Gracias.


No especificó una base de datos o una versión. Si tiene la suerte de poder usar el nuevo SQL Server 2012 y tener acceso a MSDN, puede usar las nuevas y brillantes palabras clave OFFSET y FETCH . La siguiente consulta omitirá 20 registros y devolverá los 5 siguientes.

SELECT * FROM [Posts] ORDER BY [InsertDate] OFFSET 20 ROWS FETCH NEXT 5 ROWS ONLY

Consulte http://msdn.microsoft.com/en-us/library/ms188385(v=sql.110).aspx#Offset para obtener más información.

Además, es bastante fácil copiar la forma en que Massive lo hace y escribir su propio método de extensión para IDbConnection. Aquí está el código de Massive.

var query = string.Format("SELECT {0} FROM (SELECT ROW_NUMBER() OVER (ORDER BY {2}) AS Row, {0} FROM {3} {4}) AS Paged ", columns, pageSize, orderBy, TableName, where);


Si no tiene Sql Server 2012 o tiene otro DBMS, una forma de hacer paginación es dividir el procesamiento entre el DBMS y el servidor o cliente web. --- esto se recomienda solo para un tamaño de conjunto pequeño. Puede usar la palabra clave ''TOP'' en Sql Server o LIMIT en MySql o ROWNUM en Oracle para obtener la mayor cantidad de filas en el conjunto de datos. El número de filas que obtendría es igual al número que omitiría más el número que tomaría:

top = skip + take;

por ejemplo, le gustaría omitir 100 filas y tomar las siguientes 50:

top = 100 + 50

Así que su declaración SQL se vería así (sabor del servidor SQL)

SELECT TOP 150 Name, Modified, content, Created FROM Posts WHERE Created >= ''1900-01-01''

En el cliente: si usa un lenguaje .NET como C # y usa Dapper, puede usar linq para omitir un número de filas y tomar varias filas como esta:

var posts = connection.Query<Post>(sqlStatement, dynamicParameters); return posts?.ToList().Skip(skipValue).Take(takeValue);