问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在asp.net中如何将DataSet类型的数据集转换为List类型

发布网友 发布时间:2022-04-29 16:58

我来回答

3个回答

懂视网 时间:2022-04-07 22:04

public class DataTableToList<T>whereT :new() 2 3 { 4 5 ///<summary> 6 7 ///利用反射将Datatable转换成List模型 8 9 ///</summary> 10 11 ///<param name="dt"></param> 12 13 ///<returns></returns> 14 15 public static List<T> ConvertToList(DataTabledt) 16 17 { 18 19 List<T> list =newList<T>(); 20 21 Typetype =typeof(T); 22 23 stringtempName =string.Empty; 24 25 foreach(DataRowdrindt.Rows) 26 27 { 28 29 T t =newT(); 30 31 PropertyInfo[] propertys = 32 t.GetType().GetProperties(); 33 34 foreach(PropertyInfopiinpropertys) 35 36 { 37 38 tempName = pi.Name; 39 40 if(dt.Columns.Contains(tempName)) 41 42 { 43 44 if(!pi.CanWrite) 45 46 { 47 48 continue; 49 50 } 51 52 var value = dr[tempName]; 53 54 if(value !=DBNull.Value) 55 56 { 57 58 pi.SetValue(t, value,null); 59 60 } 61 62 } 63 64 } 65 66 list.Add(t); 67 68 } 69 70 returnlist; 71 72 } 73 74 }

 

2. SqlDataReader转IList

 1  /// <summary>
 2  /// 判断SqlDataReader是否存在某列
 3  /// </summary>
 4  /// <param name="dr">SqlDataReader</param>
 5  /// <param name="columnName">列名</param>
 6  /// <returns></returns>
 7  private bool readerExists(SqlDataReader dr, string columnName)
 8  {
 9 
10  dr.GetSchemaTable().DefaultView.RowFilter = "ColumnName= ‘" + columnName + "‘";
11 
12  return (dr.GetSchemaTable().DefaultView.Count > 0);
13 
14  }
15 
16  ///<summary>
17  ///利用反射和泛型将SqlDataReader转换成List模型
18  ///</summary>
19  ///<param name="sql">查询sql语句</param>
20  ///<returns></returns>
21 
22  public IList<T> ExecuteToList<T>(string sql) where T : new()
23 
24  {
25  IList<T> list;
26 
27  Type type = typeof (T);
28 
29  string tempName = string.Empty;
30 
31  using (SqlDataReader reader = ExecuteReader(sql))
32   {
33   if (reader.HasRows)
34   {
35   list = new List<T>();
36   while (reader.Read())
37    {
38    T t = new T();
39 
40    PropertyInfo[] propertys = t.GetType().GetProperties();
41 
42    foreach (PropertyInfo pi in propertys)
43    {
44    tempName = pi.Name;
45 
46    if (readerExists(reader, tempName))
47     {
48     if (!pi.CanWrite)
49     {
50     continue;
51     }
52     var value = reader[tempName];
53 
54     if (value != DBNull.Value)
55     {
56     pi.SetValue(t, value, null);
57     }
58 
59     }
60 
61    }
62 
63    list.Add(t);
64 
65    }
66   return list;
67   }
68   }
69  return null;
70  }

 

3、结果集从存储过程获取

 1 /// <summary>
 2  /// 处理存储过程
 3  /// </summary>
 4  /// <param name="spName">存储过程名</param>
 5  /// <param name="parameters">参数数组</param>
 6  /// <returns>sql数据流</returns>
 7  protected virtual SqlDataReader ExecuteReaderSP(string spName, ArrayList parameters)
 8  {
 9  SqlDataReader result = null;
10  cmd.CommandText = spName;
11  cmd.CommandType = CommandType.StoredProcedure;
12   cmd.Parameters.Clear();
13  if (parameters != null)
14   {
15   foreach (SqlParameter param in parameters)
16   {
17    cmd.Parameters.Add(param);
18   }
19   }
20  try
21   {
22   Open();
23   result = cmd.ExecuteReader(CommandBehavior.CloseConnection);
24   }
25  catch (Exception e)
26   {
27   if (result != null && (!result.IsClosed))
28   {
29    result.Close();
30   }
31   LogHelper.WriteLog("
方法异常【ExecuteReaderSP(string spName, ArrayList parameters)】" + spName, e);
32   throw new Exception(e.Message);
33   }
34  return result;
35  }

 

 1 <strong> </strong> ///<summary>
 2  ///利用反射将SqlDataReader转换成List模型
 3  ///</summary>
 4  ///<param name="spName">存储过程名称</param>
 5  ///<returns></returns>
 6 
 7  public IList<T> ExecuteQueryListSP<T>(string spName, params SqlParameter[] listParams) where T : new()
 8  {
 9  IList<T> list;
10 
11  Type type = typeof(T);
12 
13  string tempName = string.Empty;
14 
15  using (SqlDataReader reader = ExecuteReaderSP(spName, new ArrayList(listParams)))
16   {
17   if (reader.HasRows)
18   {
19   list = new List<T>();
20   while (reader.Read())
21    {
22    T t = new T();
23 
24    PropertyInfo[] propertys = t.GetType().GetProperties();
25 
26    foreach (PropertyInfo pi in propertys)
27    {
28    tempName = pi.Name;
29 
30    //for (int intField = 0; intField < reader.FieldCount; intField++)
31    //{//遍历该列名是否存在
32    //}
33 
34    if (readerExists(reader, tempName))
35     {
36     if (!pi.CanWrite)
37     {
38     continue;
39     }
40     var value = reader[tempName];
41 
42     if (value != DBNull.Value)
43     {
44     pi.SetValue(t, value, null);
45     }
46 
47     }
48 
49    }
50 
51    list.Add(t);
52 
53    }
54   return list;
55   }
56   }
57  return null;
58  }

 

作者:dasihg

转载:http://blog.csdn.net/dasihg/article/details/8943811

 

利用反射将Datatable、SqlDataReader转换成List模型

标签:

热心网友 时间:2022-04-07 19:12

在你的当前类文件里添加一个静态方法,用于强制转换的。
public
static
explicit
operator
List<StocktableSubLst>(DataSet
dataSet)//实现显式转换为List<StcktableSubLst>数据类型的方法,注意这里的修饰符和关键字的写法
{
List<StocktableSubLst>
retList
=
new
List<StocktableSubLst>();
//对dataSet进行处理
return
retList
;
}

热心网友 时间:2022-04-07 20:30

既然有分拿,那么我凑个热闹。
比如以SqlDataReader作为数据集合:
(实体)model:
public
class
users
{
public
string
username(){get;set;}
public
string
password(){get;set;}
}
private
users
getmodel(SqlDataReader
dr)
{
users
model
=
new
users;
model.username
=
dr["username"].Tostring();
model.password
=
dr["password"].Tostring();
return
model;
}
private
List<users>
getlist(SqlDataReader
dr)
{
List<users>
lst
=
new
List<users>
while(dr.read())
{
lst.Add(getmodel(dr));
}
return
lst;
}
以其它的作为数据集,也是换汤不换药
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 数据集(DataSet)是否能够在断开与数据源连接的情况下工作 如何用dataset数据集连接mysql数据库 DataTable和DataSet有什么区别 dataset数据集 DataSet数据集的用法 大家知道附近桶装水送水配送吗? 桶装水的水票什么意思 桶装水发票需要明细吗? 要一份办公室饮水机桶装水的申请报告,谢谢急~!!!在线等~!!! 给办公室购买饮用水送桶人员单子上的欠桶数是什么意思?怎么算?不太明白 各位大哥大姐们好,请问桶装水配送的出入库和回收桶的流程报表怎么写,急用,谢谢,请帮帮我吧 桶装水报价单怎样打 杀戮尖塔 显示问题 进不去闪退解决方法 杀戮尖塔闪退怎么办 杀戮尖塔一直杀退打不开 杀戮尖塔 一局 时间 杀戮尖塔鼠标拉不到下面 我要开一个农村电商服务中心是怎样开 怎么申请农村电商 就怕大众带字母前一句是什么? 简述DATASET的结构 dataset是什么意思 ASP.NET中的DataSet数据集所占用的内存什么时候会释放? 数据集DATASET中如何更新数据? 说出十个或以上,中国古代神话故事!要四个字的 C#里的DataSet到底是干什么用的,怎么用?哪位高手帮我讲解讲解,谢谢啦... 强类型数据集DataSet使用问题 C#之 DataReader 和 DataSet 的区别 关于dataset 一行多列的DataSet数据集如何转换为数组 vs2010怎么创建数据集?就是dataset c#中DataSet数据集中可以存放多个数据库吗 dataset和datatable的区别 哈尔滨去哪买冬季鞋 哈尔滨什么地方的男鞋口碑比较好? U7男鞋哈尔滨有实体店吗 哪款冬季男鞋性价比最高? lottusse哈尔滨市有专卖店吗品牌 大一综合素质测评自我总结关于养成教育,适应型教育 目前在哈尔滨都哪里有保真的飞人系列(除申格等大商城),地点越多越好,最好能有价格,风格一类描述