将分页逻辑从 SQL 转换为 Linq

Convert paging logic from SQL to Linq

我对 Linq 完全陌生。 我需要将分页逻辑从 SQL 转换为 Linq。 我在SQL的分页逻辑是:

where num BETWEEN ((@pageNumber-1)*@pageSize) + 1 and (@pageSize * @pageNumber)

所以,如果 pageNumber2 并且 pageSize30,我的查询将从第 31 行提取记录到第 60.

我在 LINQ 中实现了相同的逻辑,但它提取了错误的记录数:

query.Skip(pageNumber - 1).Take(pageSize * pageNumber).AsQueryable();

谁能告诉我我的 LINQ 查询有什么问题。

您需要在 Linq 中跳过并获取记录而不是整个页面:

query.Skip((pageNumber - 1) * pageSize).Take(pageSize);
query.Skip((pageNumber - 1)*pageSize).Take(pageSize).AsQueryable();

Skip->skipping number of records,Take是取跳过one.So后的记录数,如果要显示31到60,需要Skip 30 和 Take 30.

以后您可以拨打:

query.Skip((pageNumber - 1)*pageSize).Take(pageSize).ToString();

有了这个你可以看到Sql这个LINQ会产生什么

您必须将跳过的内容乘以页面大小,与 SQL 中的方法相同,然后获取所需的行。 所以对你来说就像:

query.Skip((pageNumber - 1)*pageSize).Take(pageSize).AsQueryable();