【c#】把Dataset类型转为List<T>
2017-08-23 16:29
337 查看
之前分享过将从数据库查出来的datatable数据分页,然后将每一页的数据转成list。前几天搭档觉得这个过程太复杂,建议直接读取数据库返回泛型集合,如题目所说的把dataset类型的数据转为List<T>泛型集合,不过这样做也需要对list进行分页。本着学习的态度,昨天实践了一下这种方法,主要是封装一个dataset to list的工具类。主要代码如下:
/// <summary>
/// 获取泛型集合
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="connStr">数据库连接字符串</param>
/// <param name="sqlStr">要查询的T-SQL</param>
/// <returns></returns>
public IList<T> GetList<T>(string connStr, string sqlStr)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
using (SqlDataAdapter sda = new SqlDataAdapter(sqlStr, conn))
{
DataSet ds = new DataSet();
sda.Fill(ds);
return DataSetToList<T>(ds, 0);
}
}
}
/// <summary>
/// DataSetToList
/// </summary>
/// <typeparam name="T">转换类型</typeparam>
/// <param name="dataSet">数据源</param>
/// <param name="tableIndex">需要转换表的索引</param>
/// <returns></returns>
public IList<T> DataSetToList<T>(DataSet dataSet, int tableIndex)
{
//确认参数有效
if (dataSet == null || dataSet.Tables.Count <= 0 || tableIndex < 0)
return null;
DataTable dt = dataSet.Tables[tableIndex];
IList<T> list = new List<T>();
for (int i = 0; i < dt.Rows.Count; i++)
{
//创建泛型对象
T _t = Activator.CreateInstance<T>();
//获取对象所有属性
PropertyInfo[] propertyInfo = _t.GetType().GetProperties();
for (int j = 0; j < dt.Columns.Count; j++)
{
foreach (PropertyInfo info in propertyInfo)
{
//属性名称和列名相同时赋值
if (dt.Columns[j].ColumnName.ToUpper().Equals(info.Name.ToUpper()))
{
if (dt.Rows[i][j] != DBNull.Value)
{
info.SetValue(_t, dt.Rows[i][j], null);
}
else
{
info.SetValue(_t, null, null);
}
break;
}
}
}
list.Add(_t);
}
return list;
}
/// <summary>
/// 获取泛型集合
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="connStr">数据库连接字符串</param>
/// <param name="sqlStr">要查询的T-SQL</param>
/// <returns></returns>
public IList<T> GetList<T>(string connStr, string sqlStr)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
using (SqlDataAdapter sda = new SqlDataAdapter(sqlStr, conn))
{
DataSet ds = new DataSet();
sda.Fill(ds);
return DataSetToList<T>(ds, 0);
}
}
}
/// <summary>
/// DataSetToList
/// </summary>
/// <typeparam name="T">转换类型</typeparam>
/// <param name="dataSet">数据源</param>
/// <param name="tableIndex">需要转换表的索引</param>
/// <returns></returns>
public IList<T> DataSetToList<T>(DataSet dataSet, int tableIndex)
{
//确认参数有效
if (dataSet == null || dataSet.Tables.Count <= 0 || tableIndex < 0)
return null;
DataTable dt = dataSet.Tables[tableIndex];
IList<T> list = new List<T>();
for (int i = 0; i < dt.Rows.Count; i++)
{
//创建泛型对象
T _t = Activator.CreateInstance<T>();
//获取对象所有属性
PropertyInfo[] propertyInfo = _t.GetType().GetProperties();
for (int j = 0; j < dt.Columns.Count; j++)
{
foreach (PropertyInfo info in propertyInfo)
{
//属性名称和列名相同时赋值
if (dt.Columns[j].ColumnName.ToUpper().Equals(info.Name.ToUpper()))
{
if (dt.Rows[i][j] != DBNull.Value)
{
info.SetValue(_t, dt.Rows[i][j], null);
}
else
{
info.SetValue(_t, null, null);
}
break;
}
}
}
list.Add(_t);
}
return list;
}
相关文章推荐
- C# 将DataSet转为List<T>
- C#读取数据库返回泛型集合 把DataSet类型转换为List<T>泛型集合
- C#读取数据库返回泛型集合 把DataSet类型转换为List<T>泛型集合
- C#读取数据库返回泛型集合 把DataSet类型转换为List<T>泛型集合
- c#将List<T>转换成DataSet
- json字符串转为list<T>类型
- c#将List<T>转换成DataSet
- c# list<T> 泛类型数组 传值问题
- C# 数据批量插入到数据库SqlBulkCopy(源数据类型:List<T> Or DataTable)
- C# - list<>数据填充到Dataset里
- [C#]List<int>转string[],string[]转为string
- java 如何将List<objetct>类型强制转为新的List<实体类>
- C# List<T>转为Json数据
- C# Winform DataGrid 绑定List<> Or ObservableCollection<> 类型无法自动刷新问题
- C#中怎样将List<自己定义>转为Json格式 及相关函数-DataContractJsonSerializer
- Java 如何将List<实体类> 转为List<Object>类型
- C# IList<T>转为DataTable
- C# List<T>转为 DataTable
- List<> 转换为Dataset的C#代码实现 解决Nullable问题
- C#中如何将List<自定义>转为Json格式 及相关函数-DataContractJsonSerializer