C#將DataTable轉(zhuǎn)換成list的方法
本文實(shí)例講述了C#將DataTable轉(zhuǎn)換成list及數(shù)據(jù)分頁(yè)的方法。分享給大家供大家參考。具體如下:
/// 酒店評(píng)論列表-分頁(yè)
/// </summary>
/// <param name="userId"></param>
/// <param name="pageIndex">當(dāng)前頁(yè)</param>
/// <param name="pageCount">總頁(yè)數(shù)</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,用戶評(píng)論
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() //這個(gè)list是查出全部的用戶評(píng)論
select new CommentInfo
{
Id = p.Field<int>("hid"), //p.Filed<int>("Id") 其實(shí)就是獲取DataRow中ID列。即:row["ID"]
HotelImages = p.Field<string>("images"),
HotelName = p.Field<string>("hotelName"),
Comment = p.Field<string>("comment")
}).ToList(); //將這個(gè)集合轉(zhuǎn)換成list
int pageSize = 10; //每頁(yè)顯示十條數(shù)據(jù)
//獲取總頁(yè)數(shù)
pageCount = list.Count % pageSize == 0 ? ((list.Count - pageSize >= 0 ? (list.Count / pageSize) : (list.Count == 0 ? 0 : 1))) : list.Count / pageSize + 1;
//這個(gè)list 就是取到10條數(shù)據(jù)
//Skip跳過(guò)序列中指定數(shù)量的元素,然后返回剩余的元素。
//Take序列的開(kāi)頭返回指定數(shù)量的連續(xù)元素。
list = list.Skip(pageSize * (pageIndex - 1)).Take(pageSize).ToList(); //假設(shè)當(dāng)前頁(yè)為第三頁(yè)。這么這里就是跳過(guò) 10*(3-1) 即跳過(guò)20條數(shù)據(jù),Take(pageSize)的意思是:取10條數(shù)據(jù),既然前面已經(jīng)跳過(guò)前20條數(shù)據(jù)了,那么這里就是從21條開(kāi)始,取10條咯
}
}
catch (Exception ex)
{
// write log here
}
return list;
}
將一個(gè)DataTable轉(zhuǎn)換成一個(gè)List
首先定義一個(gè)接收DataTable字段列的類(lèi) 。類(lèi)的字段與DataTable的列字段一致
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;
using JSON.Controllers;
using System.Data;
namespace WebApplication1
{
public class Class1
{
/// <summary>
/// 將DataTable轉(zhuǎn)換成一個(gè)list
/// </summary>
/// <returns>返回一個(gè)List<User>對(duì)象</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>(); //創(chuàng)建一個(gè)List<User>的實(shí)例
if (dt != null && dt.Rows.Count > 0)
{
//AsEnumerable():返回一個(gè)IEnumerable<T> 對(duì)象,其泛型參數(shù) T 為 System.Data.DataRow。
list = (from p in dt.AsEnumerable()
select new User //new一個(gè)User對(duì)象
{
Id = p.Field<int>("id"),//p.Filed<int>("id") 其實(shí)就是獲取DataRow中ID列。即:row["ID"] 然后將它賦值給User類(lèi)的Id字段。
UserName = p.Field<string>("UserName"),
Age = p.Field<int>("Age"),
Gender = p.Field<int>("Gender")
}).ToList(); //將這個(gè)User類(lèi)對(duì)象轉(zhuǎn)換成list
}
int dataCount = list.Count; // 總的數(shù)據(jù)條數(shù)。
int pageSize=10;//每頁(yè)顯示多少條數(shù)據(jù)。
int pageCount; //總頁(yè)數(shù)。
int currentPage=3;//當(dāng)前頁(yè)。--這里假設(shè)當(dāng)前頁(yè)為第3頁(yè)。
pageCount = dataCount % pageSize == 0 ? (dataCount < pageSize ? (dataCount==0?0:1): (dataCount / pageSize)) : (dataCount / pageSize + 1);
//這個(gè)list 就是取到10條數(shù)據(jù)
//Skip跳過(guò)序列中指定數(shù)量的元素,然后返回剩余的元素。
//Take序列的開(kāi)頭返回指定數(shù)量的連續(xù)元素。
list = list.Skip(pageSize * (currentPage - 1)).Take(pageSize).ToList(); //假設(shè)當(dāng)前頁(yè)為第3頁(yè)。這么這里就是跳過(guò) 10*(3-1) 即跳過(guò)20條數(shù)據(jù),Take(pageSize)的意思是:取10條數(shù)據(jù),既然前面已經(jīng)跳過(guò)前20條數(shù)據(jù)了,那么這里就是從21條開(kāi)始,取10條咯
return list;
}
}
}
希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。
- C#中泛型舉例List<T>與DataTable相互轉(zhuǎn)換
- c#中DataTable轉(zhuǎn)List的2種方法示例
- C#中將DataTable轉(zhuǎn)化成List<T>的方法解析
- C#實(shí)現(xiàn)DataTable,List和Json轉(zhuǎn)換的方法
- C#實(shí)現(xiàn)DataTable轉(zhuǎn)換成IList的方法
- C#將DataTable轉(zhuǎn)化為L(zhǎng)ist<T>
- c#的datatable轉(zhuǎn)list示例
- c#將list類(lèi)型轉(zhuǎn)換成DataTable方法示例
- C#中DataTable和List互轉(zhuǎn)的示例代碼
相關(guān)文章
C#實(shí)現(xiàn)顯示CPU使用率與內(nèi)存使用率
這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)顯示CPU使用率與內(nèi)存使用率,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以了解一下2022-12-12C#實(shí)現(xiàn)壓縮圖片為可控制的JPEG格式
這篇文章主要為大家詳細(xì)介紹了使用C#實(shí)現(xiàn)將圖片壓縮為質(zhì)量可自己控制的JPEG的幾種方式,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2024-01-01C#設(shè)計(jì)模式之Strategy策略模式解決007大破密碼危機(jī)問(wèn)題示例
這篇文章主要介紹了C#設(shè)計(jì)模式之Strategy策略模式解決007大破密碼危機(jī)問(wèn)題,簡(jiǎn)單描述了策略模式的定義并結(jié)合加密解密算法實(shí)例分析了C#策略模式的具體使用方法,需要的朋友可以參考下2017-09-09C#多線程編程之使用ReaderWriterLock類(lèi)實(shí)現(xiàn)多用戶讀與單用戶寫(xiě)同步的方法
這篇文章主要介紹了C#多線程編程之使用ReaderWriterLock類(lèi)實(shí)現(xiàn)多用戶讀與單用戶寫(xiě)同步的方法,涉及C#多線程操作讀寫(xiě)鎖定的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11c#入門(mén)之循環(huán)語(yǔ)句使用詳解(for循環(huán)、do/while)
這篇文章主要介紹了c#入門(mén)之循環(huán)語(yǔ)句使用詳解,有for循環(huán)和do/while的示例,需要的朋友可以參考下2014-04-04