我試圖通過在Datatable上使用LINQ在ASP.NET Repeater控件上實現分頁。我希望這段代碼給我回基於參數currentPage
和pageSize
行的頁面:在IEnumerable上調用LINQ方法的結果爲空列表
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的確實包含數據行。然而,在進行linq調用之後,列表的計數爲零,因此中繼器總是綁定到allRecordsDataTable
。我誤解了IEnumerable的工作原理嗎?
P.S. .orderby()
按日期時間排序
這可能是'.Skip'。 –
如果'currentPage * pageSize'高於'allRows'中的元素數量,那麼'pageOfRows'中不會有任何記錄,因爲如果您無意中「跳過」了所有記錄,Skip'不會拋出異常。 –