将分页逻辑从 SQL 转换为 Linq
Convert paging logic from SQL to Linq
我对 Linq 完全陌生。
我需要将分页逻辑从 SQL 转换为 Linq。
我在SQL的分页逻辑是:
where num BETWEEN ((@pageNumber-1)*@pageSize) + 1 and (@pageSize * @pageNumber)
所以,如果 pageNumber
是 2
并且 pageSize
是 30
,我的查询将从第 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();
我对 Linq 完全陌生。 我需要将分页逻辑从 SQL 转换为 Linq。 我在SQL的分页逻辑是:
where num BETWEEN ((@pageNumber-1)*@pageSize) + 1 and (@pageSize * @pageNumber)
所以,如果 pageNumber
是 2
并且 pageSize
是 30
,我的查询将从第 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();