C#将DataTable转换成list的方法
作者:shichen2014 发布时间:2023-03-06 01:20:45
标签:C#,DataTable
本文实例讲述了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#程序设计有所帮助。


猜你喜欢
- 1、引言你能搜到这个教程,说明你对 Maven 感兴趣,但是又不是太理解。那么接下来这个系列的教程将会详细讲解 Maven 的用法,相信你看
- Android实现简单音乐播放器(MediaPlayer),供大家参考,具体内容如下开发工具:Andorid Studio 1.3运行环境:
- 一、牵出缓存都有哪些缓存,作用是什么,为什么这么设计1.缓存还在屏幕内的ViewHolder——Sc
- 什么是静态单例模式?静态单例模式(Static Singleton Pattern)是我在实践中总结的模式,主要解决的问题是在预先知道某依赖
- 目录1. SpringCloud特点2. 分布式系统的三个指标CAP3. Eureka4. SpringCloud Demo4.1 regi
- 本文实例为大家分享了Android购物分类效果展示的具体代码,供大家参考,具体内容如下SecondActivity.javapublic c
- 采取的方法是Fragment+FragmentTabHost组件来实现这种常见的app主页面的效果首先给出main.xml文件
- 前言众所周知如果用第三方的输入法的表情会给开发带来一定的麻烦,一般地像服务器上传的字符都是普通的字符,但是测试,就是狠狠得拿出搜狗输入法,点
- 说点废话Android开发中,TextView类的控件应该说是很常用了。一般来说我们是通过android:textSize="20
- 异步、多线程、任务、并行编程之一:选择合适的多线程模型本篇概述:@FCL4.0中已经存在的线程模型,以及它们之间异同点;@多线程编程模型的选
- 本文实例讲述了C#多线程之Thread中Thread.IsAlive属性用法。分享给大家供大家参考。具体如下:Thread.IsAlive属
- 1 本地调试介绍本地调试: 这里是指在开发环境中,部署了一整套的某个项目或者产品的服务,开发人员开发时,本地会起一个或多个服务,这些服务和开
- 一、背景上一篇通过Java自带的JConsole来获取zookeeper状态。主要有几个不方便的地方,zk集群一般会部署3或者5台,在多个J
- springboot pom文件project报错问题如下 解决方案情况1:maven版本要和课程保持一致,网盘直接下载。情况2:
- 目录Shiro简介Shiro快速入门SpringBoot-Shiro整合(最后会附上完整代码)附上最后的完整代码Shiro整合mybatis
- 在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,而不需要另
- MyEclipse *的下载,找到MyEclipse的各种历史版本下载页面:http://www.myeclipsecn.com/简单说下,
- 前言IOC和AOP是Spring 中最重要的两个模块。这里练习一下如何使用Spring Boot AOP处理方法的入参和返回值。Spring
- Spring3中加强了注解的使用,其中计划任务也得到了增强,现在创建一个计划任务只需要两步就完成了:创建一个Java类,添加一个无参无返回值
- LeetCode -- Path Sum III分析及实现方法题目描述:You are given a binary tree in whi