欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#将DataTable转换成list的方法

程序员文章站 2023-12-12 16:51:58
本文实例讲述了c#将datatable转换成list及数据分页的方法。分享给大家供大家参考。具体如下: 复制代码 代码如下:/// &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#程序设计有所帮助。

上一篇:

下一篇: