zoukankan      html  css  js  c++  java
  • C#用扩展方法进行自动生成添加删除对象转换的功能

     public static class ExtendedModel
        {
            #region 实体类的增删改查
            #region 添加
            public static string AddStr(this object t)
            {
                StringBuilder strSql = new StringBuilder();
                StringBuilder strSql1 = new StringBuilder();
                StringBuilder strSql2 = new StringBuilder();
                FieldInfo PrimaryKeyInfo = t.GetType().GetField("PrimaryKey");
                FieldInfo IdentityStrInfo = t.GetType().GetField("IdentityStr");
                string IdentityStr = "";
                if (IdentityStrInfo != null)
                {
                    IdentityStr = IdentityStrInfo.GetValue(t).ToString();
                }
                foreach (var item in t.GetType().GetProperties())
                {
                    if (IdentityStr != item.Name && item.PropertyType != typeof(System.Byte[]))
                    {
                        strSql1.Append(item.Name + ",");
                        if (item.PropertyType == typeof(string) || item.PropertyType == typeof(DateTime) || item.PropertyType == typeof(Nullable <DateTime>) || item.PropertyType == typeof(bool))
                        {
                            if (item.PropertyType == typeof(DateTime) || item.PropertyType == typeof(Nullable<DateTime>))
                            {
                                DateTime datetime = (DateTime)item.GetValue(t, null);
                                if (datetime>DateTime.Parse("1900-01-01"))
                                {
                                    strSql2.Append("'" + datetime.ToString("yyyy-MM-dd HH:mm:ss") + "',");
                                }
                                else
                                {
                                    strSql2.Append("'1900-01-01',");
                                }
                                
                            }
                            else
                            {
                                strSql2.Append("'" + item.GetValue(t, null) + "',");
                            }
                            
                        }
                        else
                        {
                            object value = item.GetValue(t, null);
                            if (value != null)
                            {
                                strSql2.Append(value + ",");
                            }
                            else
                            {
                                strSql2.Append("0,");
                            }
    
                        }
                    }
                }
                strSql.Append("insert into " + t.GetType().Name + "(");
                strSql.Append(strSql1.ToString().TrimEnd(','));
                strSql.Append(")");
                strSql.Append(" values (");
                strSql.Append(strSql2.ToString().TrimEnd(','));
                strSql.Append(")");
                return strSql.ToString();
            }
            public static bool Add(this object t)
            {
                int istrue = DbHelperSQL.ExecuteSql(AddStr(t));
                if (istrue > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            #endregion
            #region 删除
            public static string DeleteStr<T>(this T t, string Fields)
            {
                Type type = t.GetType();
                string str = "delete " + type.Name;
                if (!string.IsNullOrEmpty(Fields))
                {
                    str += " where 1=1 ";
                    foreach (string item in Fields.Split(','))
                    {
                        PropertyInfo info = type.GetProperty(item);
                        str += string.Format(" and {0}='{1}'", info.Name, info.GetValue(t, null));
                    }
                }
    
                return str;
            }
            public static string DeleteWhereStr<T>(this T t, string sqlWhere) where T : new()
            {
                Type type = t.GetType();
                string str = "delete " + type.Name + " ";
                if (!string.IsNullOrEmpty(sqlWhere))
                {
                    str += sqlWhere;
                }
    
                return str;
            }
            public static bool Delete<T>(this T t, string Fields)
            {
                int istrue = DbHelperSQL.ExecuteSql(DeleteStr(t, Fields));
                if (istrue > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            public static bool DeleteWhere<T>(this T t, string sqlWhere) where T : new()
            {
                int istrue = DbHelperSQL.ExecuteSql(DeleteWhereStr(t, sqlWhere));
                if (istrue > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            #endregion
            #endregion
    
            #region 获取实体类
            /// <summary>
            /// DataRow转换实体类
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="row"></param>
            /// <returns></returns>
            public static T ToModel<T>(this DataRow row) where T : new()
            {
                T t = new T();
                foreach (var item in t.GetType().GetProperties())
                {
                    if (row.Table.Columns.IndexOf(item.Name) > -1)
                    {
                        if (row[item.Name] != null && typeof(System.DBNull) != row[item.Name].GetType())
                        {
                            if (typeof(System.Byte) == row[item.Name].GetType())
                            {
                                if (item.PropertyType == typeof(System.Nullable<int>) || item.PropertyType == typeof(int))
                                {
                                    item.SetValue(t,Convert.ToInt32(row[item.Name]), null);
                                }
                                
                            }
                            else
                            {
                                item.SetValue(t, Convert.ChangeType(row[item.Name], item.PropertyType), null);
    
                            }
                        }
                        else if (typeof(System.DateTime) == item.PropertyType)
                        {
                            item.SetValue(t, DateTime.Parse("1999-12-12"), null);
                        }
    
                    }
    
                }
                return t;
            }
            /// <summary>
            /// DataRow转换实体类
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="row"></param>
            /// <returns></returns>
            public static List<T> ToModelList<T>(this DataTable dt) where T : new()
            {
                List<T> list = new List<T>();
                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow item in dt.Rows)
                    {
                        list.Add(ToModel<T>(item));
                    }
    
                }
                return list;
            }
            /// <summary>
            /// 查询Where获取实体类
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="strWhere"></param>
            /// <returns></returns>
            public static T Model<T>(this T t, string strWhere)
                where T : class,new()
            {
                string str = "select top 1 * from " + typeof(T).Name + " " + strWhere;
                DataTable dt = DbHelperSQL.Query(str).Tables[0];
                if (dt.Rows.Count > 0)
                {
                    return ToModel<T>(dt.Rows[0]);
                }
                else
                {
                    return null;
                }
            }
            /// <summary>
            /// 查询Where获取实体列表
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="strWhere"></param>
            /// <returns></returns>
            public static List<T> ModelList<T>(this T t, string strWhere)
                where T : class,new()
            {
                string str = "select * from " + typeof(T).Name + " " + strWhere;
                DataTable dt = DbHelperSQL.Query(str).Tables[0];
                List<T> list = new List<T>();
                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow item in dt.Rows)
                    {
                        list.Add(ToModel<T>(item));
                    }
    
                }
                return list;
            }
            #endregion
    
            #region 实体类转换
            public static T EntityToT<T, TT>(this TT tt) where T : new()
            {
                T t = new T();
                List<PropertyInfo> listT = t.GetType().GetProperties().ToList();
                List<PropertyInfo> listObj = tt.GetType().GetProperties().ToList();
                foreach (var item in listT)
                {
                    object value = SetPropertyValue(item, listObj, tt);
                    item.SetValue(t, value, null);
                }
                return t;
            }
            private static object SetPropertyValue(PropertyInfo info, List<PropertyInfo> listObj, object obj)
            {
                try
                {
                    object obValue = null;
                    Type type = info.PropertyType;
                    List<PropertyInfo> objInfo = listObj.Where(c => c.Name.ToLower() == info.Name.ToLower()).ToList();
                    if (objInfo.Count > 0)
                    {
                        obValue = objInfo[0].GetValue(obj, null);
                        if (type == typeof(decimal) || type == typeof(Decimal))
                        {
    
                            if (obValue != null)
                            {
                                obValue = decimal.Parse(obValue.ToString());
                            }
    
                        }
                        else if (type == typeof(int))
                        {
                            if (obValue != null)
                            {
                                obValue = int.Parse(obValue.ToString());
                            }
                        }
                        else if (type == typeof(DateTime))
                        {
                            if (obValue != null)
                            {
                                DateTime date = new DateTime();
                                if (DateTime.TryParse(obValue.ToString(), out date))
                                {
                                    obValue = date;
                                }
                                else
                                {
                                    obValue = DateTime.Parse("1999-12-12");
                                }
    
                            }
                            else
                            {
                                obValue = DateTime.Parse("1999-12-12");
                            }
                        }
                    }
                    return obValue;
                }
                catch (Exception ex)
                {
                    throw new Exception(string.Format("实体转换失败")); ;
                }
    
            }
            #endregion
    
    
        }

    调用方法

    //datarow转换对象
    VWB_Weight upModel = dt.Rows[0].ToModel<VWB_Weight>();
    //table转换list
    List<VWB_Weight> upModel = dt.ToModelList<VWB_Weight>();
    
    upModel.Add();
    //一个对象转换另一个对象
    AA a = upModel.EntityToT<AA>;

    动软生成器模板

    <#@ template language="c#" HostSpecific="True" #>
    <#@ output extension= ".cs" #>
    <#
        TableHost host = (TableHost)(Host);
        host.Fieldlist.Sort(CodeCommon.CompareByintOrder);
    #>
    using System; 
    using System.Text;
    using System.Collections.Generic; 
    using System.Data;
    namespace <#= host.NameSpace #>.Model<# if( host.Folder.Length > 0) {#>.<#= host.Folder #><# } #>
    {
        <# if( host.TableDescription.Length > 0) {#>
        //<#= host.TableDescription #>
        <# } #>
        public class <#= host.GetModelClass(host.TableName) #>
        {
    
            <# foreach (ColumnInfo c in host.Fieldlist)
            { #>/// <summary>
            /// <#= string.IsNullOrEmpty(c.Description) ? c.ColumnName : c.Description #>
            /// </summary>        
            private <#= CodeCommon.DbTypeToCS(c.TypeName) #> _<#= c.ColumnName.ToString().ToLower() #>;
            public <#= CodeCommon.DbTypeToCS(c.TypeName) #> <#= c.ColumnName #>
            {
                get{ return _<#= c.ColumnName.ToString().ToLower()#>; }
                set{ _<#= c.ColumnName.ToString().ToLower() #> = value; }
            }        
            <# } #>
            public string PrimaryKey="<# foreach (ColumnInfo c in host.Keys)
                { #><#= c.ColumnName #>,<#}#>".TrimEnd(',');
    public string IdentityStr = "<# for(int i=0;i< host.Fieldlist.Count;i++) {   ColumnInfo c = host.Fieldlist[i]; if (c.IsIdentity) {#><#= c.ColumnName#><# if (i< host.Fieldlist.Count-1 ) {#>,<#}#><#}}#>".TrimEnd(',');
    
            public string IdentityKey="<#= host.IdentityKey==null?"":host.IdentityKey.ColumnName#>";
    
        }
    }

     像删除和修改的一些代码没有顾得上去添加

  • 相关阅读:
    寒假要学习的知识点
    Linux firewall防火墙 换成 iptables 防火墙
    git add出现 "fatal: in unpopulated submodule XXX" 错误
    使用navicat连接mysql报10038错时解决方法
    php 获取url重定向
    php 获取文件后缀的几种方法
    Windows+PHP7.3环境下安装imagick扩展和imagemagick
    php7 连接数据库的方法
    Warning from https://mirrors.aliyun.com/composer: Support for Composer 1 is deprecated and some packages will not be available. You should upgrade to Composer 2.
    php 执行GuzzleHttp请求时发生cURL error 60: SSL certificate problem错误的解决方法
  • 原文地址:https://www.cnblogs.com/shijiewutonghua/p/4911926.html
Copyright © 2011-2022 走看看