zoukankan      html  css  js  c++  java
  • 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;   
    
            }          
    
        }  
    
    }
  • 相关阅读:
    [leetcode] 17. 电话号码的字母组合
    C++17 Fold Expressions
    多线程----NSOperation
    CGD---1--开辟并发新线程
    彻底解决_OBJC_CLASS_$_某文件名", referenced from:问题(转)
    ios 内存使用陷阱 和imageNamed 、imageWithContentsOfFile:(转)
    (转)unbalanced calls to begin/end appearance transitions for uiviewcontroller的解决方法
    ios开发种证书
    使用CAShapeLayer与UIBezierPath画出想要的图形
    定位子字符串的位置
  • 原文地址:https://www.cnblogs.com/ChineseMoonGod/p/6024637.html
Copyright © 2011-2022 走看看