一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - ASP.NET教程 - ASP.NET中實(shí)現(xiàn)根據(jù)匿名類、datatable、sql生成實(shí)體類

ASP.NET中實(shí)現(xiàn)根據(jù)匿名類、datatable、sql生成實(shí)體類

2019-12-17 12:45junjie ASP.NET教程

這篇文章主要介紹了ASP.NET中實(shí)現(xiàn)根據(jù)匿名類、datatable、sql生成實(shí)體類,這個(gè)小小工具類非常實(shí)用,使用起來(lái)也很方便,需要的朋友可以參考下

在開(kāi)發(fā)中可能會(huì)遇到這幾種情況:

1、EF或LINQ查詢出來(lái)的匿名對(duì)象在其它地方調(diào)用不方便,又懶的手動(dòng)建實(shí)體類

2、通過(guò)datatable反射實(shí)體需要先建一個(gè)類 ,頭痛

3、通過(guò)SQL語(yǔ)句返回的實(shí)體也需要先建一個(gè)類 ,頭痛

4、如果通過(guò)代碼生成器要寫模版,需要安裝或者不想生成一堆不用的類 
 
為了解決上面的不便之處,我封裝了一個(gè)實(shí)體生成類,可以扔到程序里面任意調(diào)用

封裝類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Text.RegularExpressions;
 
namespace SyntacticSugar
{
  /// <summary>
  /// ** 描述:實(shí)體生成類
  /// ** 創(chuàng)始時(shí)間:2015-4-17
  /// ** 修改時(shí)間:-
  /// ** 作者:sunkaixuan
  /// ** qq:610262374 歡迎交流,共同提高 ,命名語(yǔ)法等寫的不好的地方歡迎大家的給出寶貴建議
  /// </summary>
  public class ClassGenerating
  {
    /// <summary>
    /// 根據(jù)匿名類獲取實(shí)體類的字符串
    /// </summary>
    /// <param name="entity">匿名對(duì)象</param>
    /// <param name="className">生成的類名</param>
    /// <returns></returns>
    public static string DynamicToClass(object entity, string className)
    {
      StringBuilder reval = new StringBuilder();
      StringBuilder propertiesValue = new StringBuilder();
      var propertiesObj = entity.GetType().GetProperties();
      string replaceGuid = Guid.NewGuid().ToString();
      string nullable = string.Empty;
      foreach (var r in propertiesObj)
      {
 
        var type = r.PropertyType;
        if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
        {
          type = type.GetGenericArguments()[0];
          nullable = "?";
        }
        if (!type.Namespace.Contains("System.Collections.Generic"))
        {
          propertiesValue.AppendLine();
          string typeName = ChangeType(type);
          propertiesValue.AppendFormat("public {0}{3} {1} {2}", typeName, r.Name, "{get;set;}", nullable);
          propertiesValue.AppendLine();
        }
      }
 
      reval.AppendFormat(@"
         public class {0}{{
            {1}
         }}
      ", className, propertiesValue);
 
 
      return reval.ToString();
    }
 
 
    /// <summary>
    /// 根據(jù)DataTable獲取實(shí)體類的字符串
    /// </summary>
    /// <param name="sql"></param>
    /// <param name="className"></param>
    /// <returns></returns>
    public static string DataTableToClass(DataTable dt, string className)
    {
      StringBuilder reval = new StringBuilder();
      StringBuilder propertiesValue = new StringBuilder();
      string replaceGuid = Guid.NewGuid().ToString();
      foreach (DataColumn r in dt.Columns)
      {
        propertiesValue.AppendLine();
        string typeName = ChangeType(r.DataType);
        propertiesValue.AppendFormat("public {0} {1} {2}", typeName, r.ColumnName, "{get;set;}");
        propertiesValue.AppendLine();
      }
      reval.AppendFormat(@"
         public class {0}{{
            {1}
         }}
      ", className, propertiesValue);
 
 
      return reval.ToString();
    }
 
    /// <summary>
    /// 根據(jù)SQL語(yǔ)句獲取實(shí)體類的字符串
    /// </summary>
    /// <param name="sql">SQL語(yǔ)句</param>
    /// <param name="className">生成的類名</param>
    /// <param name="server">服務(wù)名</param>
    /// <param name="database">數(shù)據(jù)庫(kù)名稱</param>
    /// <param name="uid">賬號(hào)</param>
    /// <param name="pwd">密碼</param>
    /// <returns></returns>
    public static string SqlToClass(string sql, string className, string server, string database, string uid, string pwd)
    {
      using (SqlConnection conn = new SqlConnection(string.Format("server={0};uid={2};pwd={3};database={1}", server, database, uid, pwd)))
      {
        SqlCommand command = new SqlCommand();
        command.Connection = conn;
        command.CommandText = sql;
        DataTable dt = new DataTable();
        SqlDataAdapter sad = new SqlDataAdapter(command);
        sad.Fill(dt);
        var reval = DataTableToClass(dt, className);
        return reval;
      }
    }
    /// <summary>
    /// 根據(jù)SQL語(yǔ)句獲取實(shí)體類的字符串
    /// </summary>
    /// <param name="sql">SQL語(yǔ)句</param>
    /// <param name="className">生成的類名</param>
    /// <param name="connName">webconfig的connectionStrings name</param>
    /// <returns></returns>
    public static string SqlToClass(string sql, string className, string connName)
    {
      string connstr = System.Configuration.ConfigurationManager.ConnectionStrings[connName].ToString();
      if (connstr.Contains("metadata"))//ef
        connstr = Regex.Match(connstr, @"connection string\=""(.+)""").Groups[1].Value;
      using (SqlConnection conn = new SqlConnection(connstr))
      {
        SqlCommand command = new SqlCommand();
        command.Connection = conn;
        command.CommandText = sql;
        DataTable dt = new DataTable();
        SqlDataAdapter sad = new SqlDataAdapter(command);
        sad.Fill(dt);
        var reval = DataTableToClass(dt, className);
        return reval;
      }
    }
    /// <summary>
    /// 匹配類型
    /// </summary>
    /// <param name="type"></param>
    /// <returns></returns>
    private static string ChangeType(Type type)
    {
      string typeName = type.Name;
      switch (typeName)
      {
        case "Int32": typeName = "int"; break;
        case "String": typeName = "string"; break;
      }
      return typeName;
    }
  }
}

 

調(diào)用如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//通過(guò)匿名對(duì)象生成實(shí)體類
      var dynamicObj = new { id = 1, name = "小名", entity = new enityt1() };
      //注意:只能是單個(gè)實(shí)體不能傳入 List<T> ,集合需要  List[0]
      string classCode = ClassGenerating.DynamicToClass(dynamicObj, "classDynamic");
 
 
      //通過(guò)datatable生成實(shí)體類
      DataTable dt = new DataTable();
      dt.Columns.Add("Id", typeof(int));
      dt.Columns.Add("Name");
 
      classCode = ClassGenerating.DataTableToClass(dt, "classTatabale");
 
 
      //通過(guò)sql語(yǔ)句生成實(shí)體類
      classCode = ClassGenerating.SqlToClass("select * from note", "Note", "127.0.0.1", "MyWork", "sa", "sasa");
      classCode = ClassGenerating.SqlToClass("select * from dbo.AccessoriesDetail", "AccessoriesDetail", "NFDEntities");//通過(guò) config connstring名稱

 

然后在調(diào)試狀態(tài)把你需要的結(jié)果CTRL+C 然后去新建一個(gè)類CTRL+V

ASP.NET中實(shí)現(xiàn)根據(jù)匿名類、datatable、sql生成實(shí)體類

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 青青国产在线观看 | 极品虎白女在线观看一线天 | 日本成人黄色网址 | 久久精品视在线观看85 | 脱了白丝校花的内裤猛烈进入 | 国产精品激情综合久久 | 国产午夜精品一区二区三区不卡 | 欧美精品国产一区二区 | 亚洲区在线 | 国产良心大作白丝精厕 | 婷婷色天使在线视频观看 | 果冻传媒在线视频观看免费 | 美国一级大黄大色毛片 | 日本阿v精品视频在线观看 日本xxx片免费高清在线 | 逼中极品 | 青春草视频免费观看 | 2020精品极品国产色在线观看 | 国产亚洲精品美女久久久 | 美女下面被cao出水 美女污视频 | 国产伦精品一区二区三区免费观看 | 欧美成人免费观看国产 | 三级黄色片在线免费观看 | 扒开斗罗美女了的胸罩和内裤漫画 | 男神插曲女生动漫完整版动漫 | 亚洲国产一区二区三区青草影视 | 欧美一级裸片 | 国产一卡2卡3卡四卡精品网站 | 亚洲精品AV无码永久无码 | 啊啊啊好爽在线观看 | 荡女淫春2古装 | 国产成人精品免费午夜 | 2021久久| 亚洲精品久久久久69影院 | 女仆色在线观看 | 欧美一区二区三区高清不卡tv | 国产成人一区二区三区 | 免费的强动漫人物 | 亚洲精品福利一区二区在线观看 | 69福利区 | 国产91精选学生在线观看 | 女人和拘做受全过程免费 |