IList转化为DataSet,解决了System.nullable()的问题
在做毕业设计时,需要用到这项功能,于是在网上搜索了一段代码,但是后来发现,在处理int类型时,会发生System.nullable的错误,于是自己查阅资料,进行了小小的改动,终于成功。。详细见一下方法。
public static DataSet ConvertToDataSet<T>(IList<T> list) { if (list == null || list.Count <= 0) { return null; } DataSet ds = new DataSet(); DataTable dt = new DataTable(typeof(T).Name); DataColumn column; DataRow row; System.Reflection.PropertyInfo[] myPropertyInfo = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); foreach (T t in list) { if (t == null) { continue; } row = dt.NewRow(); for (int i = 0, j = myPropertyInfo.Length; i < j; i++) { System.Reflection.PropertyInfo pi = myPropertyInfo[i]; string name = pi.Name; // if (pi.PropertyType == System.Nullable<>) // { // pi.PropertyType = System.Int32; // } if (dt.Columns[name] == null) { if (pi.PropertyType.IsGenericType && pi.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))//这段是我进行修改和判断的地方 { Type[] typeArray = pi.PropertyType.GetGenericArguments(); Type baseType = typeArray[0]; column = new DataColumn(name, baseType); } else { column = new DataColumn(name, pi.PropertyType); } dt.Columns.Add(column); } row[name] = pi.GetValue(t, null); } dt.Rows.Add(row); } ds.Tables.Add(dt); return ds; }