Sql server 通过Dapper在一个查询中获取分页SQL Server结果和总计数?

Sql server 通过Dapper在一个查询中获取分页SQL Server结果和总计数?,sql-server,pagination,dapper,Sql Server,Pagination,Dapper,如果我有一个如下所示的用户模型: public class User { public Guid Id { get; set; } public DateTime CreatedAtUtc { get; set; } public string Username { get; set; } public string Country { get; set; } } var spaniards = connection.Query<User>(

如果我有一个如下所示的用户模型:

public class User
{
    public Guid Id { get; set; }
    public DateTime CreatedAtUtc { get; set; }
    public string Username { get; set; }
    public string Country { get; set; }
}
var spaniards = connection.Query<User>(
                    "select * from Users where Country=@Country OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY",
                    new { Country = "Spain" }).ToList();
…我将执行一个从给定行开始的查询,并获取数量有限的其他行(基本上用于对结果进行分页),如下所示:

public class User
{
    public Guid Id { get; set; }
    public DateTime CreatedAtUtc { get; set; }
    public string Username { get; set; }
    public string Country { get; set; }
}
var spaniards = connection.Query<User>(
                    "select * from Users where Country=@Country OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY",
                    new { Country = "Spain" }).ToList();
var spaniards=connection.Query(
“从用户中选择*,其中Country=@Country OFFSET 0行仅获取接下来的10行”,
新的{Country=“西班牙”});

。。使用Dapper(.Net),是否有可能在一个查询中获得特定的、有限的结果集行总数,如果是的话。。如何解决此问题?

解决此问题的一种方法是使用splitOn功能,以及count(1)over()

让我们假设以下sql字符串:

var sql = "select *, overall_count = COUNT(1) OVER() from Users ORDER BY Id Asc OFFSET 5 ROWS;"
连同以下dapper.net调用:

HashSet<int> hashSet = new HashSet<int>();
Func<User, int, User> map = (result, count) =>
{
   hashSet.Add(count);
   return result;
};
await connection.QueryAsync(sql, map, "overall_count").ConfigureAwait(false);
HashSet HashSet=newhashset();
Func映射=(结果、计数)=>
{
hashSet.Add(count);
返回结果;
};
wait connection.QueryAsync(sql,map,“总计数”).ConfigureAwait(false);
这将把dapper调用的结果分成两部分(就像连接不同的表一样),每次都会调用map functor,在这种情况下,我们只需将计数存储在hashset中(然后可以检查hashset.count是否为1)

希望这有帮助


PS:我不确定你的抵销是否可以在没有任何订单的情况下由Jörg B进行-你是在一次查询中得到它的吗?