我对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查询出了什么问题吗。
您必须像在SQL中一样,将跳过的内容乘以页面大小,然后取下所需的行。所以对你来说,这就像:
query.Skip((pageNumber - 1)*pageSize).Take(pageSize).AsQueryable();
在Linq:中,您需要跳过并获取记录,而不是整个页面
query.Skip((pageNumber - 1) * pageSize).Take(pageSize);
query.Skip((pageNumber - 1)*pageSize).Take(pageSize).AsQueryable();
Skip
->跳过记录数,Take
取跳过的记录数后的记录数。所以,如果你想显示31到60。您需要Skip
30和Take
30。
将来您可以拨打:
query.Skip((pageNumber - 1)*pageSize).Take(pageSize).ToString();
有了这个,你可以看到Sql
和LINQ
将产生什么