【发布时间】:2014-01-16 17:48:24
【问题描述】:
我正在尝试通过在数据表上使用 LINQ 在 ASP.NET 中继器控件上实现分页。我希望这段代码能根据参数currentPage 和pageSize 给我返回一页行:
IEnumerable<DataRow> allRows = allRecordsDataTable.AsEnumerable();
List<DataRow> pageOfRows = new List<DataRow>();
if (allRows.Any())
{
pageOfRows = allRows
.OrderBy(dr => dr[3])
.Reverse()
.Skip(currentPage * pageSize)
.Take(pageSize)
.ToList();
}
if (pageOfRows.Count > 0)
repeater.DataSource = pageOfRows.CopyToDataTable();
else
repeater.DataSource = allRecordsDataTable;
代码属于 if 块,因此 IEnumerable 确实包含 DataRows。然而,在进行 linq 调用后,List 的计数为零,因此转发器始终绑定到 allRecordsDataTable。我是否误解了 IEnumerable 的工作原理?
附: .orderby() 按日期时间列排序
【问题讨论】:
-
可能是
.Skip。