(新)将DataTable转换成list (--分页--) 【Skip--Take】

31 篇文章 0 订阅

将DataTable转换成list 及数据分页。

<1>

/// <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 
		on hotelorder.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

<1>首先定义一个接收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; }
    }
}

<2>

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; 

        }        
        
    }
}




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值