DMSLinq表达式框架实现(五) DMSTableExpression实现

  1  /// <summary>
  2     /// 表的表达式处理实现
  3     /// </summary>
  4     public class DMSTableExpression : DMSExpressionVisitor, IDMSTableExpressionParser
  5     {
  6         /// <summary>
  7         /// 
  8         /// </summary>
  9         public IDMSDbProvider DbProvider
 10         {
 11             get;
 12             set;
 13         }
 14         private List<SingleTableExpression> SingleExpression
 15         {
 16             get;
 17             set;
 18         }
 19         /// <summary>
 20         /// 
 21         /// </summary>
 22         public Expression DMSExpression { get; set; }
 23         /// <summary>
 24         /// 
 25         /// </summary>
 26         public Dictionary<string, string> KeyValue { get; set; }
 27         /// <summary>
 28         /// 
 29         /// </summary>
 30         public Dictionary<string, string> TableNameAlias { get; set; }
 31 
 32         private StringBuilder _ResultSql = new StringBuilder();
 33         /// <summary>
 34         /// 
 35         /// </summary>
 36         /// <param name="keyTable"></param>
 37         /// <returns></returns>
 38         public string AnalyzeExpression(ref Dictionary<string, string> keyTable)
 39         {
 40             this._ResultSql = new StringBuilder();
 41             if (DMSExpression != null)
 42             {
 43                 this.Visit(DMSExpression);
 44             }
 45             keyTable = this.KeyValue;
 46 
 47             if (keyTable.Count > 0)
 48             {
 49                 string lastKey = keyTable.Last().Key;
 50                 if (TableNameAlias.ContainsKey(lastKey))
 51                 {
 52                     keyTable[lastKey] = TableNameAlias[lastKey];
 53                 }
 54             }
 55             return this._ResultSql.ToString();
 56         }
 57         private bool IsAs = true;
 58         /// <summary>
 59         /// 
 60         /// </summary>
 61         /// <returns></returns>
 62         public string AnalyzeExpression()
 63         {
 64             this._ResultSql = new StringBuilder();
 65             this.IsAs = false;
 66             if (DMSExpression != null)
 67             {
 68                 this.Visit(DMSExpression);
 69             }
 70             return this._ResultSql.ToString();
 71         }
 72         /// <summary>
 73         /// 
 74         /// </summary>
 75         /// <param name="dms"></param>
 76         /// <param name="type"></param>
 77         public void Append(IDMSBase dms, Type type)
 78         {
 79             if (this.KeyValue == null)
 80                 KeyValue = new Dictionary<string, string>();
 81             if (SingleExpression == null)
 82                 SingleExpression = new List<SingleTableExpression>();
 83             if (TableNameAlias == null)
 84                 TableNameAlias = new Dictionary<string, string>();
 85 
 86             if (typeof(DMSWhere) == type
 87                || typeof(DMSOn) == type
 88                || typeof(DMSSelect) == type)
 89             {
 90                 if (SingleExpression.Find(q => q.Key == dms.CurrentType && q.TableType == type) != null)
 91                 {
 92                     return;
 93                 }
 94                 SingleExpression.Add(new SingleTableExpression() { Key = dms.CurrentType, TableType = type });
 95             }
 96             if (!type.IsGenericType && type.IsClass)
 97             {
 98                 NewArrayExpression newArrayExpression = Expression.NewArrayInit(typeof(object), Expression.New(type));
 99                 if (this.DMSExpression != null)
100                 {
101                     NewArrayExpression newArrayExpression2 = this.DMSExpression as NewArrayExpression;
102                     IEnumerable<Expression> initializers2 = newArrayExpression2.Expressions.Concat(newArrayExpression.Expressions);
103                     newArrayExpression = Expression.NewArrayInit(typeof(object), initializers2);
104                     this.DMSExpression = dms.ModifyExpression(newArrayExpression);
105                 }
106                 else
107                 {
108                     this.DMSExpression = dms.ModifyExpression(newArrayExpression);
109                 }
110             }
111             else
112             {
113                 NewArrayExpression newArrayExpression = Expression.NewArrayInit(typeof(object), Expression.Constant(type.ToString()));
114                 if (this.DMSExpression != null)
115                 {
116                     Expression exp = this.DMSExpression;
117                     NewArrayExpression newArrayExpression2 = exp as NewArrayExpression;
118                     if (newArrayExpression2 != null)
119                     {
120                         IEnumerable<Expression> initializers2 = newArrayExpression2.Expressions.Concat(newArrayExpression.Expressions);
121                         newArrayExpression = Expression.NewArrayInit(typeof(object), initializers2);
122                         this.DMSExpression = dms.ModifyExpression(newArrayExpression);
123                     }
124                 }
125                 else
126                 {
127                     this.DMSExpression = dms.ModifyExpression(newArrayExpression);
128                 }
129             }
130         }
131         /// <summary>
132         /// 
133         /// </summary>
134         /// <param name="nex"></param>
135         /// <returns></returns>
136         protected override NewExpression VisitNew(NewExpression nex)
137         {
138             Type type = nex.Type;
139 
140             if (!type.IsGenericType && type.IsClass)
141             {
142                 AdjustConstant(type);
143             }
144             #region MyRegion
145             //else
146             //{
147             //    foreach (Expression exp in nex.Arguments)
148             //    {
149             //        this.Visit(exp);
150             //        if (!this._ResultSql.ToString().EndsWith(","))
151             //        {
152             //            this._ResultSql.Append(",");
153             //        }
154             //    }
155             //    if (this._ResultSql.ToString().EndsWith(","))
156             //    {
157             //        this._ResultSql.Remove(this._ResultSql.Length - 1, 1);
158             //    }
159             //    this._ResultSql.Append(" ");
160             //} 
161             #endregion
162             return nex;
163         }
164         private void AdjustConstant(Type type)
165         {
166             string text = string.Empty;
167             bool IsEntity = false;
168             //是否是IEntity
169             if (type.GetInterface(typeof(IEntity).FullName, false) != null)
170             {
171                 if (!this.KeyValue.ContainsKey(type.ToString()))
172                 {
173                     string AliasName = "t" + this.KeyValue.Count;
174                     if (TableNameAlias.ContainsKey(type.ToString()))
175                     {
176                         AliasName = TableNameAlias[type.ToString()];
177                     }
178                     this.KeyValue.Add(type.ToString(), AliasName);
179                 }
180                 text = type.GetEntityName();
181                 if (string.IsNullOrEmpty(text)) {
182                     text = type.Name;
183                 }
184                 IsEntity = true;
185             }
186             else if (type.GetInterface(typeof(IDMSParser).FullName, false) != null)//是否是IDMSParser
187             {
188                 text = type.GetDMSName();
189                 if (type == typeof(DMSSelect))
190                 {
191                     text = "";
192                 }
193             }
194             else
195             {
196                 if (!this.KeyValue.ContainsKey(type.ToString()))
197                 {
198                     string AliasName = "t" + this.KeyValue.Count;
199                     if (TableNameAlias.ContainsKey(type.ToString()))
200                     {
201                         AliasName = TableNameAlias[type.ToString()];
202                     }
203                     this.KeyValue.Add(type.ToString(), AliasName);
204                 }
205             }
206             if (!string.IsNullOrEmpty(text) && this.DbProvider != null && type.GetInterface(typeof(IDMSParser).FullName, false) == null)
207             {
208                 text = this.DbProvider.BuildTableName(text);
209             }
210             this._ResultSql.Append(text);
211             if (IsEntity && IsAs)
212             {
213                 this._ResultSql.Append(" AS ");
214                 text = this.KeyValue[type.ToString()];
215                 if (!string.IsNullOrEmpty(text) && this.DbProvider != null)
216                 {
217                     text = this.DbProvider.BuildTableName(text);
218                 }
219                 this._ResultSql.Append(text);
220             }
221             this._ResultSql.Append(" ");
222         }
223         /// <summary>
224         /// 
225         /// </summary>
226         /// <param name="c"></param>
227         /// <returns></returns>
228         protected override Expression VisitConstant(ConstantExpression c)
229         {
230 
231             if (c.Value != null)
232             {
233                 if (c.Type.IsArray)
234                 {
235                     Array array = c.Value as Array;
236                     foreach (object current in array)
237                     {
238                         if (current != null)
239                         {
240                             Type type = current.GetType();
241                             if (type == typeof(string))
242                             {
243                                 if (!this.KeyValue.ContainsKey(current.ToString()))
244                                 {
245                                     string AliasName = "t" + this.KeyValue.Count;
246                                     if (this.TableNameAlias.ContainsKey(current.ToString()))
247                                     {
248                                         AliasName = this.TableNameAlias[current.ToString()];
249                                     }
250                                     this.KeyValue.Add(current.ToString(), AliasName);
251                                 }
252                             }
253                             else
254                             {
255                                 AdjustConstant(type);
256                             }
257                         }
258                     }
259                 }
260                 else
261                 {
262                     if (!this.KeyValue.ContainsKey(c.Value.ToString()))
263                     {
264                         this.KeyValue.Add(c.Value.ToString(), "t" + this.KeyValue.Count);
265                     }
266                 }
267             }
268             return base.VisitConstant(c);
269         }
270         /// <summary>
271         /// 
272         /// </summary>
273         /// <param name="na"></param>
274         /// <returns></returns>
275         protected override Expression VisitNewArray(NewArrayExpression na)
276         {
277             foreach (Expression current in na.Expressions)
278             {
279                 this.Visit(current);
280                 this._ResultSql.Append(" ");
281             }
282             return na;
283         }
284     }

 

转载于:https://www.cnblogs.com/kingkoo/archive/2012/05/14/2500713.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值