查询字段转化为模型的简单方法
在做.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; }