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;  
        }         
    } 
}

希望本文所述对大家的C#程序设计有所帮助。

(0)

相关推荐

  • C#实现将json转换为DataTable的方法

    本文实例讲述了C#实现将json转换为DataTable的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: #region 将json转换为DataTable /// <summary> /// 将json转换为DataTable /// </summary> /// <param name="strJson">得到的json</param> /// <returns></returns> pr

  • C#中把Datatable转换为Json的5个代码实例

    实例一: 复制代码 代码如下: /// <summary>         /// Datatable转换为Json         /// </summary>        /// <param name="table">Datatable对象</param>         /// <returns>Json字符串</returns>         public static string ToJson(D

  • c# DataTable与不同结构实体类转换的方法实例

    在实际开发过程中,或者是第三方公司提供的数据表结构,与我们系统中的实体类字段不对应,遇到这样我们怎么处理呢?可能有人会说,在转换时创建一个实体对象,对表里的数据逐行遍历来实例化这个实体对象不就完了.的确没错,这方法可行,但是这个方法效率极低,遇到亿万数据的话那就要实例化亿万个对象,由此可见它的效率了.先看一下我的实体类 复制代码 代码如下: /// <summary>/// 具体的实体类,和数据表中不同/// </summary>public class Person{    [D

  • c#将list类型转换成DataTable方法示例

    复制代码 代码如下: /// <summary>       /// 将List转换成DataTable       /// </summary>       /// <typeparam name="T"></typeparam>       /// <param name="data"></param>       /// <returns></returns>   

  • C#操作EXCEL DataTable转换的实例代码

    复制代码 代码如下: //加载Excel          public   DataSet LoadDataFromExcel(string filePath)         {             try            {                 string strConn;                 //strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + &qu

  • C#中的DataSet、string、DataTable、对象转换成Json的实现代码

    C#中对象,字符串,dataTable.DataReader.DataSet,对象集合转换成Json字符串方法. public class ConvertJson { #region 私有方法 /// <summary> /// 过滤特殊字符 /// </summary> /// <param name="s">字符串</param> /// <returns>json字符串</returns> private s

  • C#将DataTable转化为List<T>

    在使用三层架构开发一个网站时,希望把DataTable对象转换为List<T>对象,于是在网上找资料,总结一个比较方便的方法来实现--使用反射. 思路: 初始化一个List<T>对象 获取到T所有的属性,初始化一个T对象 遍历所有属性,如果DataTable中含有相应属性的值则为T对象赋值,如果没有对应的列则检查数据模型是否定义有误(属性名与列名比较时不区分大小写) 将T对象添加到List<T>对象中 总体代码: 反射获取到的属性信息 DataTable中的列信息,对比

  • C#中DataTable实现行列转换的方法

    本文实例讲述了C#中DataTable实现行列转换的方法.分享给大家供大家参考.具体实现方法如下: protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DataTable tt = GetCrossTable(CreateDT()); GridView1.DataSource = tt; GridView1.DataBind(); } } //创建DataTable protected DataTab

  • C#中DataTable导出为HTML格式的方法

    前言 在C#中DataTable导出数据的时候,我们需要HTML格式的输出数据, 这时候就需要使用将DataTable导出为到HTML格式的方法了,以下代码就可以帮助我们达到目的. 首先,我们要绑定DataTable和 DataGridView. 一.通过DataTable绑定DataGridView 1. 创建DataTable,添加列 DataTable table = new DataTable(); table.Columns.Add("ID", typeof(int)); t

  • C# DataTable 转换为 实体类对象实例

    复制代码 代码如下: public class User {         public int ID { get; set; }         public string Name { get; set; } } //对应数据库表: //User //字段:ID.Name 那么你也许需要编写将DataTable 转换为实体对象的方法,便利DataTable.Rows 获得并填充.. 下面是我写的一个通用方法,分享+记录,便于日后直接Copy ~ 复制代码 代码如下: private sta

随机推荐