• DataTable拓展方法


    首先必不可缺少的是Mapper

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Globalization;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace CommonHelper
    {
        public class Mapper
        {
            public static object ToEntity(DataRow adaptedRow, Type entityType)
            {
                if (entityType == null || adaptedRow == null)
                    return null;
                object entity = Activator.CreateInstance(entityType);
                CopyToEntity(entity, adaptedRow);
                return entity;
            }
    
            public static T ToEntity<T>(DataRow adaptedRow) where T : new()
            {
                T item = new T();
                if (adaptedRow == null)
                    return item;
                item = Activator.CreateInstance<T>();
                CopyToEntity(item, adaptedRow);
                return item;
            }
    
            public static void CopyToEntity(object entity, DataRow adaptedRow)
            {
                if (entity == null || adaptedRow == null)
                    return;
                PropertyInfo[] propertyInfos = entity.GetType().GetProperties();
                foreach (PropertyInfo propertyInfo in propertyInfos)
                {
                    if (!CanSetPropertyValue(propertyInfo, adaptedRow))
                        continue;
    
                    try
                    {
                        if (adaptedRow[propertyInfo.Name] is DBNull)
                        {
                            propertyInfo.SetValue(entity, null, null);
                            continue;
                        }
                        SetPropertyValue(entity, adaptedRow, propertyInfo);
                    }
                    finally
                    {
                    }
                }
            }
    
            public static bool CanSetPropertyValue(PropertyInfo propertyInfo, DataRow adaptedRow)
            {
                if (!propertyInfo.CanWrite)
                    return false;
    
                if (!adaptedRow.Table.Columns.Contains(propertyInfo.Name))
                    return false;
    
                return true;
            }
    
            public static void SetPropertyValue(object entity, DataRow adaptedRow, PropertyInfo propertyInfo)
            {
                if (propertyInfo.PropertyType == typeof(DateTime?) || propertyInfo.PropertyType == typeof(DateTime))
                {
                    DateTime date = DateTime.MaxValue;
                    DateTime.TryParse(adaptedRow[propertyInfo.Name].ToString(),
                        CultureInfo.CurrentCulture, DateTimeStyles.None, out date);
    
                    propertyInfo.SetValue(entity, date, null);
                }
                else
                    propertyInfo.SetValue(entity, adaptedRow[propertyInfo.Name], null);
            }
        }
    }
    View Code

    其次是拓展方法

    using Newtonsoft.Json;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace CommonHelper.Extensions
    {
        /// <summary>
        /// DataTable拓展方法
        /// </summary>
        public static class DateTableExtensions
        {
            /// <summary>
            /// 将dataTable转换为实体类集合
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="table"></param>
            /// <returns></returns>
            public static List<T> ToCollection<T>(this DataTable table) where T : new()
            {
                if (table != null && table.Rows.Count > 0)
                {
                    List<T> list = new List<T>();
                    foreach (DataRow dr in table.Rows)
                    {
                        list.Add(Mapper.ToEntity<T>(dr));
                    }
                    return list;
                }
                else
                    return new List<T>();
            }
    
            /// <summary>
            /// 将datattable第一行转换为实体类
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="table"></param>
            /// <returns></returns>
            public static T FirstRowEntiy<T>(this DataTable table) where T :new()
            {
                if (table != null && table.Rows.Count > 0)
                    return Mapper.ToEntity<T>(table.Rows[0]);
                else
                    return default(T);
            }
    
            /// <summary>
            /// datatable转2标准Jon
            /// </summary>
            /// <param name="dt">DataTable数据源</param>
            /// <param name="total">可选:转普通json传>0的值或忽略此参数;如果针对easyUI的json的一定要把total参数分页总行数传进来</param>
            /// <returns></returns>
            public static string ToJsonStr(this DataTable dt, int total)
            {
                System.Collections.ArrayList arrayList = new System.Collections.ArrayList();
                foreach (DataRow dr in dt.Rows)
                {
                    try
                    {
                        Dictionary<string, object> dictionary = new Dictionary<string, object>();//实例化一个参数集合
                        foreach (DataColumn column in dt.Columns)
                        {
                            dictionary.Add(column.ColumnName,dr[column.ColumnName].ToString();
                        }
                        arrayList.Add(dictionary);//arrarylist中添加键值
                    }
                    catch (Exception)
                    {
                        
                        throw;
                    }
                }
                if (total>0)//easyUI专用,分页的总行数
                {
                    var dirctionary=new Dictionary<string,object>();
                    dirctionary.Add("total",total);//此参数是easyUI使用
                    dirctionary.Add("rows",arrayList);//此参数是easyUI使用
                    return JsonConvert.SerializeObject(dirctionary);//序列化参数
                }
                else
                {
                    return JsonConvert.SerializeObject(arrayList);
                }
            }
        }
    }
    View Code

    调用方法

    前提是返回的list集合或者实体类
    
    list集合:
    return dal.GetInfo().ToCollection<实体类名>();
    
    实体类:
    return dal.GetInfo().FirstRow2Entity<实体类名>();

    (dal是自定义的)
  • 相关阅读:
    电子商务网站的设计与实现(四):项目名称malling和一期开发计划
    电子商务网站的设计与实现(三):四大子系统,登录-账务-前端-后端
    电子商务网站的设计与实现(三):四大子系统,登录-账务-前端-后端
    删除垃圾软件,系统和网络出现故障
    删除垃圾软件,系统和网络出现故障
    2014年工作中遇到的20个问题:201-220
    2014年工作中遇到的20个问题:201-220
    电子商务网站的设计与实现(二):一期功能清单
    电子商务网站的设计与实现(二):一期功能清单
    CDS view注解解析
  • 原文地址:https://www.cnblogs.com/xibianriluo/p/4848335.html
Copyright © 2020-2023  润新知