国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#將DataTable轉換成list的方法

2020-01-24 02:10:17
字體:
來源:轉載
供稿:網友

本文實例講述了C#將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  
telorder.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; 
}

將一個DataTable轉換成一個List
首先定義一個接收DataTable字段列的類 。類的字段與DataTable的列字段一致

復制代碼 代碼如下:
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
 
namespace WebApplication1 

    /// <summary> 
    /// 用戶信息 
    /// </summary> 
    public class User 
    { 
        public int Id { get; set; } 
 
        public string UserName { get; set; } 
 
        public int Age { get; set; } 
 
        public int Gender { get; set; } 
    } 
}

復制代碼 代碼如下:
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using JSON.Controllers; 
using System.Data; 
 
namespace WebApplication1 

    public class Class1 
    { 
        /// <summary> 
        /// 將DataTable轉換成一個list 
        /// </summary> 
        /// <returns>返回一個List<User>對象</returns> 
        public List<User> TableToList() 
        { 
            string sql = "select  * from T_User"; //T_User表里總共有 id,UserName,Age,Gender四列 
            DataTable dt= SqlHelper.ExecuteDataTable(sql,null); 
            var list = new List<User>(); //創建一個List<User>的實例 
            if (dt != null && dt.Rows.Count > 0) 
            { 
                //AsEnumerable():返回一個IEnumerable<T> 對象,其泛型參數 T 為 System.Data.DataRow。 
                list = (from p in dt.AsEnumerable() 
                        select new User  //new一個User對象 
                        { 
                            Id = p.Field<int>("id"),//p.Filed<int>("id") 其實就是獲取DataRow中ID列。即:row["ID"] 然后將它賦值給User類的Id字段。 
                            UserName = p.Field<string>("UserName"), 
                            Age = p.Field<int>("Age"), 
                            Gender = p.Field<int>("Gender") 
                        }).ToList(); //將這個User類對象轉換成list 
            } 
            int dataCount = list.Count; // 總的數據條數。 
            int pageSize=10;//每頁顯示多少條數據。             
            int pageCount; //總頁數。 
            int currentPage=3;//當前頁。--這里假設當前頁為第3頁。 
            pageCount = dataCount % pageSize == 0 ? (dataCount < pageSize ? (dataCount==0?0:1): (dataCount / pageSize)) : (dataCount / pageSize + 1); 

     //這個list 就是取到10條數據   
            //Skip跳過序列中指定數量的元素,然后返回剩余的元素。   
            //Take序列的開頭返回指定數量的連續元素。   
            list = list.Skip(pageSize * (currentPage - 1)).Take(pageSize).ToList(); //假設當前頁為第3頁。這么這里就是跳過 10*(3-1) 即跳過20條數據,Take(pageSize)的意思是:取10條數據,既然前面已經跳過前20條數據了,那么這里就是從21條開始,取10條咯   
            return list;  
        }         
    } 
}

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 定陶县| 新龙县| 景泰县| 潼关县| 通州市| 五原县| 呼伦贝尔市| 上蔡县| 交城县| 休宁县| 霍山县| 南阳市| 平湖市| 额尔古纳市| 平乡县| 工布江达县| 巨野县| 右玉县| 孟州市| 娄底市| 彰武县| 溧水县| 祁东县| 思茅市| 探索| 武城县| 靖宇县| 宁武县| 怀仁县| 玉龙| 沈阳市| 大兴区| 紫云| 峨边| 清流县| 香格里拉县| 泾阳县| 崇明县| 岳西县| 六盘水市| 禄劝|