Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#MySql.Data.EntityFrameworkCore存储过程分页_C#_Mysql_Asp.net Core_Ef Core 3.1 - Fatal编程技术网

c#MySql.Data.EntityFrameworkCore存储过程分页

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

对于在使用sql server(tsql)之前在复杂查询中使用分页,我可以非常轻松地使用COUNT(*)OVER()作为TotalCount在任何复杂查询中,它将返回total COUNT,我可以在分页中使用它,但在mysql中它将不起作用

要使用asp.net核心连接mysql,有两个包

  • MySql.Data.EntityFrameworkCore
  • Pomelo.EntityFrameworkCore.MySql
我使用了这两种方法,但我不知道如何在存储过程中实现分页并使用FromSqlRaw返回问题是返回行数OUT TotalCount INT,我无法获得它

    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的源。