对象和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开发框架网发布内容,转载请附上原文出处连接
YES开发框架
评论列表

发表评论

评论内容
昵称:
关联文章

对象Datatable
C# PNGICO,ICOPNG,PNG图标常规尺寸
DbDataReader对象
C# 时间戳与 标准时间
PNG-ICO图标格式工具
Python对象json字符串
C#类型转换,对象转换
C# 使用Newtonsoft对象JSON字符串的时候日期类型的处理
C#汉字拼音
WPF对象级资源
Python Flask返回JSON字符串,自定义对象JSON字符串
Redis OM .NET Redis对象映射框架
GZDBHelper中GetTable方法,执行SQL语句,返回DataTable结构
.net 简单实现在H5中将word、jpg、png成PDF给PDF添加水印并且控制样式可视化编辑
C# 根据DataTable 转换成JSON 文本字符串数据
NPOI 读取EXCEL(2003,2007)并转换为DataTable
软件:批量HEICJPG 苹果手机照片格式JPG
winform绑定对象数据源
C# 十六进制字符串byte[],Byte[] String
.net异步Task同步