【发布时间】:2022-03-03 17:45:04
【问题描述】:
我有这个 SQL 查询:
DECLARE @pageNo int=1
DECLARE @pageSize int=2
SELECT top 2 id,
Title,
Author,
NumberOfPages,
PublishedAt,
RowNumber
FROM
(
SELECT top 2 id, Title, Author,
NumberOfPages,PublishedAt,
Row_Number() over (order by id desc) as RowNumber
FROM Books
)T
WHERE
T.RowNumber BETWEEN ((@pageNo-1)*@pageSize)+1 AND (@pageNo*@pageSize)
我想在 ASP.NET 核心中使用 C# 执行这个 SQL 查询
我试过这个代码:
[HttpGet]
public async Task<ActionResult<IEnumerable<Books>>> GetBooks()
{
return await _context.Books.FromSqlRaw("Select * from Books where id = 2").ToListAsync();
}
但此代码仅适用于上一个示例中的单个 Sql 查询行
Select * from Books where id = 2
但是当我尝试使用多行的复杂 SQL 查询时不起作用
希望对你有所帮助
非常感谢
【问题讨论】:
-
我不确定我是否遵循您在这里想要实现的目标。您的子查询只会返回 0 到 2 行,因此如果
@pageNo的值大于 2,您将不会得到任何行。此外,如果@pageSize比2高,您仍然只能得到 2 行。 -
此 SQL 查询与其他编程语言完美配合,例如使用 php 完美工作,但我不知道如何使用 ASP.net 核心执行相同的查询
标签: sql-server database asp.net-web-api c#-4.0 isqlquery