本文实例讲述了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 = ;  

     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 > )  

         {  

             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 = ; //每页显示十条数据  

  

             //获取总页数  

             pageCount = list.Count % pageSize ==  ? ((list.Count - pageSize >=  ? (list.Count / pageSize) : (list.Count ==  ?  : ))) : list.Count / pageSize + ;  

  

             //这个list 就是取到10条数据  

             //Skip跳过序列中指定数量的元素,然后返回剩余的元素。  

             //Take序列的开头返回指定数量的连续元素。  

             list = list.Skip(pageSize * (pageIndex - )).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 > )  

            {  

                //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=;//每页显示多少条数据。              

            int pageCount; //总页数。  

            int currentPage=;//当前页。--这里假设当前页为第3页。  

            pageCount = dataCount % pageSize ==  ? (dataCount < pageSize ? (dataCount==?:): (dataCount / pageSize)) : (dataCount / pageSize + ); 
     //这个list 就是取到10条数据                //Skip跳过序列中指定数量的元素,然后返回剩余的元素。                //Take序列的开头返回指定数量的连续元素。                list = list.Skip(pageSize * (currentPage - )).Take(pageSize).ToList(); //假设当前页为第3页。这么这里就是跳过 10*(3-1) 即跳过20条数据,Take(pageSize)的意思是:取10条数据,既然前面已经跳过前20条数据了,那么这里就是从21条开始,取10条咯                return list;           }              }  }

C#将DataTable转换成list的方法的更多相关文章

  1. DataTable 转换成 Json的3种方法

    在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>.DataTable转换为Json格式.特别在使用Extjs框架的时候,A ...

  2. C#中对象,字符串,dataTable、DataReader、DataSet,对象集合转换成Json字符串方法。

    C#中对象,字符串,dataTable.DataReader.DataSet,对象集合转换成Json字符串方法. public class ConvertJson { #region 私有方法 /// ...

  3. DataTable转换成IList<T>的简单实现

    DataTable的无奈 很多时候,我们需要去操作DataTable.但DataTable的操作,实在是太不方便了.Linq?lambda表达式?统统没有... 特别是对现有结果集做进一步筛选,这样的 ...

  4. 将DataTable转换成CSV文件

    DataTable用于在.net项目中,用于缓存数据,DataTable表示内存中数据的一个表.CSV文件最早用在简单的数据库里,由于其格式简单,并具备很强的开放性,所以起初被扫图家用作自己图集的标记 ...

  5. DataTable转换成json字符串

    将DataTable里面的行转换成json字符串方法: #region DataTable转为json /// <summary> /// DataTable转为json /// < ...

  6. 将DataSet(DataTable)转换成JSON格式(生成JS文件存储)

    public static string CreateJsonParameters(DataTable dt) { /**/ /**/ /**/ /* /*********************** ...

  7. 将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据

    领导让在存储过程中批量添加数据,找出效率最高的,我看到后台代码后,发现可以将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据,知道还有其 ...

  8. DataTable转换成匿名类的List类型

    DataTable转换成匿名类的List类型   因为匿名类是不能够 Activator.CreateInstance进行反射实例化的 /// <summary> /// 匿名类的转换方式 ...

  9. 将DataTable转换成Json格式

    方法一: 将DataTable数据拼接成json字符串,方法如下: ///<summary> /// dataTable转换成Json格式 ///</summary> ///& ...

随机推荐

  1. Java笔记--泛型总结与详解

    泛型简介: 在泛型没有出来之前,编写存储对象的数据结构是很不方便的.如果要针对每类型的对象写一个数据结构,     则当需要将其应用到其他对象上时,还需要重写这个数据结构.如果使用了Object类型, ...

  2. 淘宝(阿里百川)手机客户端开发日记第五篇 SharedPreferences使用详解

    我们知道,Android中数据存储技术由于如下几种 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 ...

  3. iphone/ipad图标尺寸

    http://www.yixieshi.com/ucd/13759.html APP界面设计规范指导APP设计过程中的设计标准,根据统一的设计标准,使得整个APP在视觉上统一.提高用户对APP的产品认 ...

  4. window.parent与window.openner 之前的总结

    今天总结一下js中几个对象的区别和用法: 1.首先来说说 parent.window与top.window的用法 "window.location.href","loca ...

  5. sharepoint读取启用了追加功能的多行文本的历史版本记录

    当建立多行文本栏时,有个功能就是"追加对现有文本所做的更改",这个功能启用后,这个多行文本就只运行追加内容而不允许修改以前提交的内容.常常被应用在多个用户之间的协作.问题的追踪等记 ...

  6. maven项目 Java compiler level does not match the version of the installed Java project facet

    因工作的关系,Eclipse开发的Java项目拷来拷去,有时候会报一个很奇怪的错误.明明源码一模一样,为什么项目复制到另一台机器上,就会报“java compiler level does not m ...

  7. 4.在二元树中找出和为某一值的所有路径[FindPathsInBinaryTree]

    [题目]: 输入一个整数和一棵二元树.从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径.打印出和与输入整数相等的所有路径. 例如输入整数22和如下二元树 10              ...

  8. sql SELECT时的with(nolock)选项说明

    I used to see my senior developers use WITH (NOLOCK) when querying in SQL Server and wonder why they ...

  9. codeforces B. Xenia and Spies 解题报告

    题目链接:http://codeforces.com/problemset/problem/342/B 题目意思:有n个spy,编号从1-n,从左到右排列.现在的任务是,spy s要把信息传递到spy ...

  10. Java删除文件夹和文件

    转载自:http://blog.163.com/wu_huiqiang@126/blog/static/3718162320091022103144516/ 以前在javaeye看到过关于Java操作 ...