将dataset转化为IList<T>,关键是将datatable转化为类型IList<T>,代码如下:
public T Export(System.Data.DataTable Table)
{
// 定义集合
IList<T> List = null;
// 获得此模型的类型
Type type = typeof(T);
string tempName = "";
foreach (DataRow dr in Table.Rows)
{
T t = new T();
//获得此模型的公共属性
PropertyInfo[] propertys = t.GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
tempName = pi.Name;
//检查DataTable是否包含此列
if (Table.Columns.Contains(tempName))
{
// 判断此属性是否有Setter
if (!pi.CanWrite)
{
continue;
}
object value = dr[tempName];
if (value != DBNull.Value)
{
if (value.GetType().ToString() == "System.Double")
{
pi.SetValue(t, doubleToInt(value), null);
}
else if (value.GetType().ToString() == "System.String")
{
pi.SetValue(t, value, null);
}
}
}
}
return t;
}
}
public static IList <T> FillList <T>(System.Data.IDataReader reader)
{
IList <T> lst= new List <T>();
while (reader.Read())
{
T RowInstance = Activator.CreateInstance <T>();
foreach (PropertyInfo Property in typeof(T).GetProperties())
{
foreach (BindingFieldAttribute FieldAttr in Property.GetCustomAttributes(typeof(BindingFieldAttribute), true))
{
try
{
int Ordinal = reader.GetOrdinal(FieldAttr.FieldName);
if (reader.GetValue(Ordinal) != DBNull.Value)
{
Property.SetValue(RowInstance, Convert.ChangeType(reader.GetValue(Ordinal), Property.PropertyType), null);
}
}
catch
{
break;
}
}
}
lst.Add(RowInstance);
}
return lst;
}