感谢您阅读我的博客,如果您现在工作、学习累了或者疲惫了,不妨聆听一下音乐,它能够减轻你的疲劳,还能够带给您一种舒适愉悦的心情。如果您认为这篇文章还不错或者有所收获,您可以在页面 右侧和底部 扫描二维码 打赏我,您的鼓励是我继续写作、分享的最大动力!

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; }
    }
}

 

 

posted @ 2021-11-23 11:01  Love In Winter  阅读(535)  评论(0编辑  收藏  举报
作者: LifeDecidesHappiness
出处: http://www.cnblogs.com/LifeDecidesHappiness/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,否则保留追究法律责任的权利,且在文章页面明显位置给出原文连接,如有问题,可以通过以下邮箱地址 2468881301@qq.com  联系我,非常感谢。
踏实做一个为人民服务的搬运工!
如果您认为这篇文章还不错或者有所收获,您可以通过右边的“打赏”功能,您的支持和鼓励是我继续写作、分享的最大动力!

点击关注不迷路,让我带你上高速!