对象和Datatable互转
对象和Datatable互转
对象转DataTable
DataTable转对象
C# 全选
/// <summary>
/// 下面通过一个方法来实现返回DataTable类型
/// LINQ返回DataTable类型
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="varlist"></param>
/// <returns></returns>
public static DataTable ToDataTable<T>(IEnumerable<T> varlist)
{
DataTable dtReturn = new DataTable();
// column names
PropertyInfo[] oProps = null;
if (varlist == null)
return dtReturn;
foreach (T rec in varlist)
{
if (oProps == null)
{
oProps = ((Type)rec.GetType()).GetProperties();
foreach (PropertyInfo pi in oProps)
{
Type colType = pi.PropertyType;
if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition()
== typeof(Nullable<>)))
{
colType = colType.GetGenericArguments()[0];
}
dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
}
}
DataRow dr = dtReturn.NewRow();
foreach (PropertyInfo pi in oProps)
{
dr[pi.Name] = pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue
(rec, null);
}
dtReturn.Rows.Add(dr);
}
dtReturn.AcceptChanges();
return dtReturn;
}
public static DataTable EnumToDataTable(Type enumType, string NameFileName, string valFileName)
{
string[] Names = System.Enum.GetNames(enumType);
Array Values = System.Enum.GetValues(enumType);
DataTable table = new DataTable();
table.Columns.Add(NameFileName, System.Type.GetType("System.String"));
table.Columns.Add(valFileName, System.Type.GetType("System.Int32"));
table.Columns[NameFileName].Unique = true;
for (int i = 0; i < Values.Length; i++)
{
DataRow DR = table.NewRow();
DR[NameFileName] = Names[i].ToString();
DR[valFileName] = (int)Values.GetValue(i);
table.Rows.Add(DR);
}
return table;
}
DataTable,DataRow转对象
C# 全选
public static T ConvertObject<T>(this DataRow dr, bool ignoreCase = false) where T : new()
{
var v = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
T t = new T();
Dictionary<string, string> collumnMap = new Dictionary<string, string>();
foreach (DataColumn col in dr.Table.Columns)
{
if (ignoreCase)
collumnMap.Add(col.ColumnName.ToLower(), col.ColumnName);
else
collumnMap.Add(col.ColumnName, col.ColumnName);
}
foreach (var s in v)
{
var p_name = s.Name;
if (ignoreCase) p_name = p_name.ToLower();
if (collumnMap.ContainsKey(p_name))
{
var colName = collumnMap[p_name];
if (object.Equals(dr[colName], DBNull.Value)) continue;
{
s.SetValue(t, dr[colName], null);
}
}
}
return t;
}
public static List<T> ConvertObject<T>(this DataTable dt, bool ignoreCase = false) where T : new()
{
var v = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
List<T> data = new List<T>();
Dictionary<string, string> collumnMap = new Dictionary<string, string>();
foreach (DataColumn col in dt.Columns)
{
if (ignoreCase)
collumnMap.Add(col.ColumnName.ToLower(), col.ColumnName);
else
collumnMap.Add(col.ColumnName, col.ColumnName);
}
foreach (DataRow dr in dt.Rows)
{
T t = new T();
foreach (var s in v)
{
var p_name = s.Name;
if (ignoreCase) p_name = p_name.ToLower();
if (collumnMap.ContainsKey(p_name))
{
var colName = collumnMap[p_name];
if (object.Equals(dr[colName], DBNull.Value)) continue;
{
s.SetValue(t, dr[colName], null);
}
}
}
data.Add(t);
}
return data;
}
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
CommonCode YES开发框架