使用LINQ为对象分页

如何在LINQ查询中实现分页?实际上,如果可以模仿sql TOP函数,我会感到满意。但是,我确信无论如何都需要尽快提供完整的分页支持。

var queryResult = from o in objects                  where ...
                  select new
                      {
                         A = o.a,
                         B = o.b                      }
                   ????????? TOP 10????????


摇曳的蔷薇
浏览 416回答 3
3回答

郎朗坤

使用Skip和Take绝对是要走的路。如果我实现这个,我可能会编写自己的扩展方法来处理分页(使代码更具可读性)。实施当然可以使用Skip和Take:static&nbsp;class&nbsp;PagingUtils&nbsp;{ &nbsp;&nbsp;public&nbsp;static&nbsp;IEnumerable<T>&nbsp;Page<T>(this&nbsp;IEnumerable<T>&nbsp;en,&nbsp;int&nbsp;pageSize,&nbsp;int&nbsp;page)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;en.Skip(page&nbsp;*&nbsp;pageSize).Take(pageSize); &nbsp;&nbsp;} &nbsp;&nbsp;public&nbsp;static&nbsp;IQueryable<T>&nbsp;Page<T>(this&nbsp;IQueryable<T>&nbsp;en,&nbsp;int&nbsp;pageSize,&nbsp;int&nbsp;page)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;en.Skip(page&nbsp;*&nbsp;pageSize).Take(pageSize); &nbsp;&nbsp;}}该类定义了两个扩展方法 - 一个用于IEnumerable和一个用于IQueryable,这意味着您可以将它与LINQ to Objects和LINQ to SQL一起使用(编写数据库查询时,编译器将选择IQueryable版本)。根据您的分页要求,您还可以添加一些其他行为(例如,处理负数pageSize或page值)。以下是如何在查询中使用此扩展方法的示例:var&nbsp;q&nbsp;=&nbsp;(from&nbsp;p&nbsp;in&nbsp;products&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;p.Show&nbsp;==&nbsp;true &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;new&nbsp;{&nbsp;p.Name&nbsp;}).Page(10,&nbsp;pageIndex);
打开App,查看更多内容
随时随地看视频慕课网APP