本文实例讲述了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 = ; 

     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 > ) 

         { 

             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 = ; //每页显示十条数据 

 

             //获取总页数 

             pageCount = list.Count % pageSize ==  ? ((list.Count - pageSize >=  ? (list.Count / pageSize) : (list.Count ==  ?  : ))) : list.Count / pageSize + ; 

 

             //这个list 就是取到10条数据 

             //Skip跳过序列中指定数量的元素,然后返回剩余的元素。 

             //Take序列的开头返回指定数量的连续元素。 

             list = list.Skip(pageSize * (pageIndex - )).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 > ) 

            { 

                //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=;//每页显示多少条数据。             

            int pageCount; //总页数。 

            int currentPage=;//当前页。--这里假设当前页为第3页。 

            pageCount = dataCount % pageSize ==  ? (dataCount < pageSize ? (dataCount==?:): (dataCount / pageSize)) : (dataCount / pageSize + ); 
     //这个list 就是取到10条数据                //Skip跳过序列中指定数量的元素,然后返回剩余的元素。                //Take序列的开头返回指定数量的连续元素。                list = list.Skip(pageSize * (currentPage - )).Take(pageSize).ToList(); //假设当前页为第3页。这么这里就是跳过 10*(3-1) 即跳过20条数据,Take(pageSize)的意思是:取10条数据,既然前面已经跳过前20条数据了,那么这里就是从21条开始,取10条咯                return list;           }              }  }
04-15 18:27
查看更多