C# 將DataTable轉換成list (--分頁--) 【Skip--Take】

將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

相關文章
相關標籤/搜索