將DataTable轉換成list 及數據分頁:sql
/// <summary> /// 酒店評論列表-分頁 /// </summary> /// <param name="userId"></param> /// <param name="pageIndex">當前頁</param> /// <param name="pageCount">總頁數</param> /// <returns></returns> public static List<CommentInfo> GetHotelCommentList(int userId, int pageIndex, out int pageCount) { var list = new List<CommentInfo>(); pageCount = 0; try { //查詢酒店ID,名字,圖片,用戶ID,用戶評論 string sql = string.Format( @"select hotels.hid,hotels.hotelName,hotels.images,hotelorder.UserID,user_HotelComment.comment from hotels with(nolock) join hotelorder with(nolock) join user_HotelComment on hotelorder.UserID=user_HotelComment.userID on hotels.hid=hotelorder.HotelID where hotelorder.UserID={0}", userId); DataTable dt = SQLHelper.Get_DataTable(sql, SQLHelper.GetCon(), null); if (dt != null && dt.Rows.Count > 0) { list = (from p in dt.AsEnumerable() //這個list是查出所有的用戶評論 select new CommentInfo { Id = p.Field<int>("hid"), //p.Filed<int>("Id") 其實就是獲取DataRow中ID列。即:row["ID"] HotelImages = p.Field<string>("images"), HotelName = p.Field<string>("hotelName"), Comment = p.Field<string>("comment") }).ToList(); //將這個集合轉換成list int pageSize = 10; //每頁顯示十條數據 //獲取總頁數 pageCount = list.Count % pageSize == 0 ? ((list.Count - pageSize >= 0 ? (list.Count / pageSize) :(list.Count == 0 ? 0 : 1))) : list.Count / pageSize + 1; //這個list 就是取到10條數據 //Skip跳過序列中指定數量的元素,而後返回剩餘的元素。 //Take序列的開頭返回指定數量的連續元素。 list = list.Skip(pageSize * (pageIndex - 1)).Take(pageSize).ToList(); //假設當前頁爲第三頁。這麼這裏就是跳過 10*(3-1) 即跳過20條數據,Take(pageSize)的意思是:取10條數據,既然前面已經跳過前20條數據了,那麼這裏就是從21條開始,取10條咯 } } catch (Exception ex) { // write log here } return list; }
C# AsEnumerable 找不到 ?? 添加引用 System.Data.DataSetExtensionsspa
DataTable dt = new DataTable();
var test = dt.AsEnumerable();
//跳過dt的前200行,取後100行 即取得200-300行
test.Skip(200).Take(100);
或
dt = dt.AsEnumerable().Take(N).CopyToDataTable<DataRow>();orm