將DataTable轉換成list 及數據分頁:
/// <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.DataSetExtensions
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>();
