c#MySql.Data.EntityFrameworkCore存储过程分页
对于在使用sql server(tsql)之前在复杂查询中使用分页,我可以非常轻松地使用COUNT(*)OVER()作为TotalCount在任何复杂查询中,它将返回total COUNT,我可以在分页中使用它,但在mysql中它将不起作用 要使用asp.net核心连接mysql,有两个包c#MySql.Data.EntityFrameworkCore存储过程分页,c#,mysql,asp.net-core,ef-core-3.1,C#,Mysql,Asp.net Core,Ef Core 3.1,对于在使用sql server(tsql)之前在复杂查询中使用分页,我可以非常轻松地使用COUNT(*)OVER()作为TotalCount在任何复杂查询中,它将返回total COUNT,我可以在分页中使用它,但在mysql中它将不起作用 要使用asp.net核心连接mysql,有两个包 MySql.Data.EntityFrameworkCore Pomelo.EntityFrameworkCore.MySql 我使用了这两种方法,但我不知道如何在存储过程中实现分页并使用FromSqlR
- MySql.Data.EntityFrameworkCore
- Pomelo.EntityFrameworkCore.MySql
DELIMITER $$
CREATE PROCEDURE get_articles(IN _offset INT, IN _count INT, OUT _total INT)
BEGIN
SELECT SQL_CALC_FOUND_ROWS *
FROM content c JOIN content_types t
ON c.content_type = t.id
WHERE t.name = 'article'
LIMIT _offset, _count;
SET _total = FOUND_ROWS();
END$$
DELIMITER ;
c#与MySql.Data.EntityFrameworkCore
var result = await dbContext.Result.FromSqlRaw("CALL get_articles (0,30,@TotalCount)",totalCount
).AsNoTracking().ToListAsync();
这里是演示您的过程应该包含第一个元素或页码,然后您可以在SQL中组合limit关键字。例如,限制kpagecountpagenumber、kpagecount(pagenumber+1)-1 还有一个版本采用限制n偏移量m 编辑后:
请在您的调用中也包括参数(C#)。我可以很容易地使用sql server(tsql)(COUNT(*)OVER()作为TotalCount)在任何复杂查询中都会返回total COUNT,但在mysql中我不能这样做,所以请尝试mysql的RANK()OVER()(PARTITION BY/ORDER BY),它也可以使用cte表达式。返回整个数据集,然后使用linq to objects.RANK()OVER()(PARTITION BY/ORDER BY)不起作用(COUNT(*)OVER()作为TotalCount)它将返回总行数而不是行数另一种我经常使用的方法(ranking并不总是有用)是CTE(或view),其中上部有原始数据和一些排名列,它们是主查询中GROUP BY的源。