将分页逻辑从SQL转换为Linq

时间:2016-10-27 06:44:39

标签: c# entity-framework linq linq-to-sql sql-to-linq-conversion

我对Linq完全不熟悉。 我需要将分页逻辑从SQL转换为Linq。 我在SQL中的分页逻辑是:

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

因此,如果pageNumber2pageSize30,我的查询会将记录从行31提取到行{{1} }。

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

60

有人可以请告诉我LINQ查询有什么问题。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

render() {
    <div>
        {<this.props.sidebar names={ ['foo', 'bar'] } isOpen={true} />}
        {<this.props.content type={ contentType } background={'#fff'} />}
    <div>
}

query.Skip((pageNumber - 1)*pageSize).Take(pageSize).AsQueryable(); - &gt;跳过记录数量,Skip在跳过记录后会占用记录数。因此,如果要显示31到60,则需要Take 30和Skip 30。

将来你可以致电:

Take

通过此功能,您可以查看此query.Skip((pageNumber - 1)*pageSize).Take(pageSize).ToString(); 将生成的Sql

答案 2 :(得分:1)

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

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