C#將DataTable轉換成list的方法


本文實例講述了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;   

        }          

    }  

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM