查询字段转化为模型的简单方法

在做.NET MVC模式开发的时候,实体类的映射很麻烦,如果用EF映射的话看着感觉很方便,用起来很多麻烦,因此,自己想了个办法,所有涉及查询的功能全部自己写实体类,直接根据存储过程的查询字段生成,然后使用映射对查询结果DataSet实例化(上一篇已经有代码写了)。

传参字符串的格式:ClassName|Colname1,Colname2;

      ClassName2|Colname1,Colname2; ....

支持多个类,类和类之间用分号隔开,类名和列名之间用竖线隔开,列之间用逗号隔开;

列名里面支持别名,带空格,括弧等方式,括号和列名字直接加空格。

生成类的格式:

//Author:。。。
    //Date:2014-5-6 16:50:45
    public class MyProjectCallTotalDayTStat
    {
        private string calltotal;
        public string CallTotal { get { return this.calltotal; } set { this.calltotal = value; } }
        private string createdata;
        public string CreateData { get { return this.createdata; } set { this.createdata = value; } }
    }

。。。。。

生成的类全部是字符类型,因此涉及到需要类型的时候自己转换。

public string ProductModel(string selectstr)
        {
            string pmstr = "";
            string tempstr="";
            Regex r = new Regex("\\(.*\\)"); //去掉括号,主要是防止里面有带逗号的查询
            selectstr = r.Replace(selectstr, "");
            string[] model = selectstr.Replace("\r\n","").Split(';'); //按类分组
            foreach (string m in model)
            {
                if (m != "")
                { 
                    int clsIndex=m.IndexOf('|'); //查找类名的位置
                    string cls=m.Substring(0,clsIndex);
                    string[] pvalue = m.Substring(clsIndex + 1).Split(',');//把剩下的字段按照逗号分组
                    tempstr = "//Author:。。。\n//Date:"+DateTime.Now.ToLocalTime()+"\n";
                    tempstr +="public class "+cls+"\n";
                    tempstr += "{\n";
                    foreach (string p in pvalue)
                    {
                        string p2 = p.Replace("'",""); //替换单引号
                        if (p2.IndexOf('.') >= 0)  //去掉点号
                        {
                            p2 = p2.Substring(p2.IndexOf('.')+1);
                        }
                        while (p2.IndexOf(' ') >= 0)  //去掉空格
                        {
                            p2 = p2.Substring(p2.IndexOf(' ') + 1);
                        }
                        //while (p2.IndexOf(")") >= 0)//去掉括弧
                        //{
                        //    p2 = p2.Substring(p2.IndexOf(")")+1);
                        //}         
                        p2 = p2.Trim();
                        tempstr += "private string  "+p2.ToLower()+";\n";
                        tempstr += "public string  " + p2 + "    { get { return this." + p2.ToLower() + ";} set{ this." + p2.ToLower() + "=value;} }\n";
                    }
                    tempstr += "}\n\n";
                    pmstr += tempstr;
                }
            }
            return pmstr;
        }

 

posted on 2014-05-06 17:23  ringwang  阅读(263)  评论(0编辑  收藏  举报