csharpToClass通过表明自动生成类

         原理其实很简单,oracle有个表存储列的类型以及备注,我们关联一下读取出这些信息之后,按照.net的规则控制一下缩进,就能有自动生成类的效果了,之所以会做这个,是因为之前用过一个jsonToCsharp的在线网站转换,就想到可以做一个类似的东西。废话不多说,下面直接贴代码;

          首先是读取需要的信息

string sql = @"select t1.column_name,data_type,nullable,comments from (
                            select table_name, column_name, data_type, data_default, nullable from user_tab_cols where Table_Name = '{0}'
                                )t1
                            RIGHT JOIN
                            (   
                                select column_name, comments from user_col_comments where Table_Name = '{0}'
                            )t2
                            on t1.column_name = t2.column_name";
            sql = string.Format(sql, tableName.ToUpper());
            var reader = await this.ExcuteQuery(sql);
            List<tableContent> list = new List<tableContent>();
            while (await reader.ReadAsync())
            {
                var obj = new tableContent();
                obj.ColumnName = reader.GetString(0);
                obj.DataType = reader.GetString(1);
                obj.IsNullable = reader.GetString(2);
                obj.Comment = reader.GetString(3);

                list.Add(obj);
            }
            sql = @"SELECT t.comments FROM user_tab_comments t WHERE t.table_name = '{0}'";
            sql = string.Format(sql, tableName.ToUpper());
            var result = await this.ExcuteQueryReturnOne(sql);
            list.ForEach(p => p.TableComment = result);
            return list;

然后就是按照语法规则以及缩进生成类字符串

            StringBuilder sbClass = new StringBuilder(5000);
            //添加类名
            sbClass.Append("/// <summary>\n");
            sbClass.Append(string.Format("/// {0}\n", listtableContent[0].TableComment));
            sbClass.Append("/// </summary>\n");
            sbClass.Append("public class " + tableName + "\n{\n");
            //循环添加列
            int count = 1;
            foreach (tableContent obj in listtableContent)
            {

                string datatype = GetDataTypeFromOracleType(obj.DataType);
                var propertyName = obj.ColumnName.ToLower();
                sbClass.Append(string.Format("\tprivate {1} {0};\n", propertyName, datatype));
                //添加注释
                sbClass.Append("\t/// <summary>\n");
                sbClass.Append(string.Format("\t/// {0}\n", obj.Comment));
                sbClass.Append("\t/// </summary>\n");


                //sbClass.Append(string.Format("public {2} {1} { get => {0}; set => {0} = value; }\n\n", obj.ColumnName, Function.GetFirstUpperCharacter(obj.ColumnName), datatype));
                sbClass.Append(string.Format("\tpublic {0} {1}\n", datatype, GetFirstUpperCharacter(obj.ColumnName)));
                sbClass.Append("\t{\n");
                sbClass.Append("\t\tget { return " + propertyName + "; }\n\t\tset { " + propertyName + " = value; }\n");
                sbClass.Append("\t}\n\n");

                count++;

            }
            //添加结束表机
            sbClass.Append("}");

            return sbClass.ToString();

 

基本上除了几个fuction函数,其余的直接copy过去你自己的项目就能使用了,最后我在考虑一个问题,要是.net能动态的把生成的这些类添加到项目里面去就好了,不过这应该是动态语言才能做的,之前听到ios的同事说过,可以动态地增加以及删除类的属性,感觉有点炫酷
           

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值