C#将DataTable转换成list的方法
程序员文章站
2023-12-13 21:02:46
本文实例讲述了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;
}
/// 酒店评论列表-分页
/// </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.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);
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#程序设计有所帮助。