zoukankan      html  css  js  c++  java
  • 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; }
        }
    }

     

  • 相关阅读:
    PYTHON 中的字符集
    字符集--发展史
    循序渐进Python3(十三) --7--  django之models
    循序渐进Python3(十三) --8--  django之admin
    循序渐进Python3(十三) --6--  cookie和session
    循序渐进Python3(十三) --5-- django请求处理流程
    循序渐进Python3(十三) --4-- django之csrf使用
    循序渐进Python3(十三) --3-- django之form表单(为自动生成的html标签添加样式)
    循序渐进Python3(十三) --2-- django之form表单(自动生成html标签和自定制提示信息)
    循序渐进Python3(十三) --1-- django之form表单
  • 原文地址:https://www.cnblogs.com/LifeDecidesHappiness/p/15592278.html
Copyright © 2011-2022 走看看