• C# DataTable 转换 Model实体类,DataTable 转换 List 集合


    using System;
    using System.Collections.Generic;
    using System.Data;
    
    namespace ModelToDataTableDemo
    {
        /// <summary>
        ///     https://www.cnblogs.com/LifeDecidesHappiness/p/15592278.html
        ///     C# DataTable 转换 Model实体类,DataTable 转换 List 集合
        ///     LDH @ 2021-11-23
        /// </summary>
        internal class Program
        {
            private static void Main()
            {
                Console.Title = "C# DataTable 转换 Model实体类,DataTable 转换 List 集合";
    
                ModelToDataTable();
    
                Console.ReadKey();
            }
    
            private static void ModelToDataTable()
            {
                // 创建一个新的DataTable
                var dt = new DataTable("User");
    
                dt.Columns.Add("UserName", typeof(string));
                dt.Columns.Add("Password", typeof(string));
                dt.Columns.Add("Age", typeof(int));
    
                for (var i = 0; i < 5; ++i)
                {
                    var dr = dt.NewRow();
    
                    dr["UserName"] = "用户名" + i;
                    dr["Password"] = "密码" + i;
                    dr["Age"] = 20;
    
                    dt.Rows.Add(dr);
    
                    // DataTable 转换为实体
                    var user = DataTableToModel<User>(dt);
                    Console.WriteLine("UserName:" + user.UserName);
                }
    
                // DataTable 转换为List
                var users = DataTableToList<User>(dt);
                Console.WriteLine("User Count:" + users.Count);
            }
    
            /// <summary>
            ///     DataTable -> Model
            /// </summary>
            /// <typeparam name="T">数据项</typeparam>
            /// <param name="dt">DataTable</param>
            /// <returns></returns>
            public static T DataTableToModel<T>(DataTable dt) where T : new()
            {
                if (dt == null || dt.Rows.Count == 0) return default;
    
                var t = new T();
    
                // 获取行数据
                var dr = dt.Rows[0];
    
                // 获取栏目
                var columns = dt.Columns;
    
                // 获得此模型的公共属性
                var property = t.GetType().GetProperties();
    
                foreach (var pi in property)
                {
                    var name = pi.Name;
    
                    // 检查DataTable是否包含此列    
                    if (columns.Contains(name))
                    {
                        if (!pi.CanWrite) continue;
    
                        var value = dr[name];
                        if (value != DBNull.Value) pi.SetValue(t, value, null);
                    }
                }
    
                return t;
            }
    
            /// <summary>
            ///     DataTable -> List
            /// </summary>
            /// <typeparam name="T">数据项</typeparam>
            /// <param name="dt">DataTable</param>
            /// <returns></returns>
            public static List<T> DataTableToList<T>(DataTable dt) where T : new()
            {
                if (dt == null || dt.Rows.Count == 0) return new List<T>();
    
                // 定义集合
                var list = new List<T>();
    
                // 获取栏目
                var columns = dt.Columns;
                foreach (DataRow dr in dt.Rows)
                {
                    var t = new T();
    
                    // 获得此模型的公共属性
                    var property = t.GetType().GetProperties();
    
                    foreach (var pi in property)
                    {
                        var name = pi.Name;
    
                        // 检查DataTable是否包含此列    
                        if (columns.Contains(name))
                        {
                            if (!pi.CanWrite) continue;
    
                            var value = dr[name];
                            if (value != DBNull.Value) pi.SetValue(t, value, null);
                        }
                    }
    
                    list.Add(t);
                }
    
                return list;
            }
        }
    }

    namespace ModelToDataTableDemo
    {
        /// <summary>
        ///     用户
        /// </summary>
        public class User
        {
            /// <summary>
            ///     用户名
            /// </summary>
            public string UserName { get; set; }
    
            /// <summary>
            ///     密码
            /// </summary>
            public string Password { get; set; }
    
            /// <summary>
            ///     年龄
            /// </summary>
            public int Age { get; set; }
        }
    }

     

  • 相关阅读:
    C++学习 之 程序的组成部分(部分知识笔记)
    debian下重装mysql
    CGI 环境变量
    boost的libboost_system问题
    debian下使用shell脚本时出现了 declare:not found 解决方法
    编译的时候出现"/usr/bin/ld: cannot find -lz
    glibc升级,解决glib版本过低的问题
    ubuntu彩色图形界面
    (转)http://blog.chinaunix.net/uid-8363656-id-2031644.html CGI 编写
    linux安装JSONCPP
  • 原文地址:https://www.cnblogs.com/LifeDecidesHappiness/p/15592278.html
Copyright © 2020-2023  润新知