当前位置: 移动技术网 > IT编程>开发语言>c# > C#将DataTable转换成list的方法

C#将DataTable转换成list的方法

2019年07月18日  | 移动技术网IT编程  | 我要评论
本文实例讲述了c#将datatable转换成list及数据分页的方法。分享给大家供大家参考。具体如下: 复制代码 代码如下:/// <summary>&nbs

本文实例讲述了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#程序设计有所帮助。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网