From b2202e4518c72863b7aa7132128b2159e29295e1 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sun, 8 Jan 2017 13:56:29 +0800 Subject: [PATCH] - --- .vs/SqlSugar/v14/.suo | Bin 168960 -> 201728 bytes .../ExpressionsToSql/BinaryExpressionInfo.cs | 2 +- SqlSugar/ExpressionsToSql/ExpConst.cs | 17 +- .../ExpressionsToSql/ExpressionContext.cs | 3 +- .../ExpressionsToSql/ExpressionParameter.cs | 2 +- .../ResolveItems/BaseResolve.cs | 2 +- .../ResolveItems/BinaryExpressionResolve.cs | 390 +++++++++++++++++- .../ResolveItems/LambdaExpressionResolve.cs | 3 +- .../ResolveItems/MemberExpressionResolve.cs | 10 +- 9 files changed, 415 insertions(+), 14 deletions(-) diff --git a/.vs/SqlSugar/v14/.suo b/.vs/SqlSugar/v14/.suo index 0e7f143c6fa58f00d07da93e85ec70ed0aaecbfe..e4f1af62c6ada874738068bc68056afdfcd7f9af 100644 GIT binary patch delta 16824 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 delta 5131 zcmd^DdsNg_9{+vs{APH}0K0wMybDL#0rt4o5!s;PyjY?=?o9ClMv@R5>H z3v-LFmYYa6TAB*K;%E72OgC%G7pE<2%|+YOId%4Ab;i!-BJB4LGX?6Vf3$yf&-u*v zd%wT?{J!qJQ?uJpvpcXpHCZD`5+ituQIce01iHGryM;`A4=2Pc348Z|gDnnlrGN2A z$ijBm%Bxs4EaX>NwN9ZHg+{(ovogpJBq?&Ho!|w=dHEbK zgp>EmD-?6`eY+46HOY*Bl(4i0~`|${(ANr?1nPsYOo$0X=Yg{om^mo zCF&xGVUK&M;6)HA#-S!qtfq_5Ix`>maZLud&nlHg(DSAe3r}bMI`TfyZ_aQERe{CMbCN4Op4^Q!P_n8UAzck512o0bygTI@9@_H7vq+>+Q|%%Rv5 z_fo~$UkmqABMeQ1RBpExdFFRpOXb4e!`u7UK{n60p3QS!aq)GXCf>d%jem93fQCUZ zhS%ChYDDw(onv`Tq*bvdUHtzlIQHihY~nDqyE&CP*5nvZz5BfL#gvb;tXEbIKA1b; zLo^P8k?7wKMtK&Tab=AEj58v&kqT@U7=-)#L8#-mNqlWn6tAgnQY`5mAx2>;VMb9R z#72!vn~X!qc4>s6gmeOTEe(gwd|AwBZmcx&oe#`zux)TSEs7c)E*o;Agt;RV*huz!7ZaR+H6# zH8t*&8SFJ5%AO47%_ZEvwyyQB`Jjbl-;CV;{uwQZ3qjune6X=!+Z3?)p+yTFYQl7o zL6xUNqdx#X?*{|v$QAdv^VF~91Y3di3z-3%UT4v`<~^2$&4CbyJN+PnQkWcekXqhH z2hU>qt)g?PTzUi(^bn7>BP7CNV>31Nv;LHD={;**i`Ye$3{IE{TPi(12NY{j?Rn3cO0=#qm;Dj*6ujfWR^3L#4) zhzp#j;C4TVL{}g@$S*$*O5@iL1GYqiRkel#Wq|K=xYht+_*6fz@@-d4>cnVx z18y?Oz&dPxj%Kj^iJ6qb&e!~$X43!D9PVF^BOT1F*877E+ANR-+C0+geC$qyNqtkX zJ3=qHie6+p#Ll20A&L)Seu~ST18U7cr~zkx_|b9JP!r(-KF3t-HFW?7__1eOL*Oq< z9LKKwFlfS&(sg6X*72sOaQ@Nc6yEMODeawUaNASiM`eYpQzD>M6Iec3lEP>Ih9em96nuuSXTUr7_bspjZR;V_ui{agy|QvKu1$u)_|3*1 z@mw5N2Z*krkgKlBgvS9NI|~{3{w8R}f4SgY^}tcs4C?AySPxkI94w*~%&ksmpSV!m zWMjNk3l@yCv0>_4jd0x$VzK2EWT?yb!fI%CF>Lr424K@32*UV%urNSGnvqa|86)5` zb;;*&AE^D$LnPCRi@E_X{f9jKYz9=~*=h*Jm8Zejv%~$TA*cBrhB>V?VaOTS7b?c; zDN(K*VvK5o6Rf~t&fA^?+dYR8OuLaH^10AoUjW8;QKSl;Qt&d#cta+UV$^s8TnfNr zdtfXUpMsel{b#D#pTc~&Io_OdSa1<#lqGZ-uaK5|-ibd**c1=TU;`dl1dsE}SK=@z z0q)`7i*kg(3)u=gK9fS zE_wSPa z?(j~hZ=t7(h}L-NB$hu3PvDYd$QCh+xbg+a>lL`ZKs=ApY4m}juO5rG)0N8;(Vi&3 z^RT`lm}_wnV{6o{o$wG~*{h(#asQyeGIzk0p4jia00n?A-@~S3M;J@N!deR5S$XUe z)|l9%wkW)J2#mldN3af@nh7a4r3Xk?%iAD~ph?DH8}v2R z`QTj%_cONZTq%<=VHPXL?6vF%JU5Lwcb%KT7|g|E4XjF?xrsSh<9zl{JU5fIsLxig zBH$&P_q={>AcWbz2+zPN#n0WK)7~5ZnFL zZ{A`?Q)3rfitVQ;Ezxmo=EG_WZ+brPWlf{;DKn(uiWoQvyXjq!tv-E(tphPcsvbyl m_3Whj!oS&EeOs_5Nz-W3nADmsR-<(WYh+%3XqX4-O!r@Uqpc4B diff --git a/SqlSugar/ExpressionsToSql/BinaryExpressionInfo.cs b/SqlSugar/ExpressionsToSql/BinaryExpressionInfo.cs index 76c86a53e..c81a90ec0 100644 --- a/SqlSugar/ExpressionsToSql/BinaryExpressionInfo.cs +++ b/SqlSugar/ExpressionsToSql/BinaryExpressionInfo.cs @@ -9,7 +9,7 @@ namespace SqlSugar public class BinaryExpressionInfo { public bool IsLeft { get; set; } - ExpressionType ExpressionType { get;set;} + public ExpressionType ExpressionType { get;set;} public object Value { get; set; } } } diff --git a/SqlSugar/ExpressionsToSql/ExpConst.cs b/SqlSugar/ExpressionsToSql/ExpConst.cs index 8d16dc0ca..f3d8c7b76 100644 --- a/SqlSugar/ExpressionsToSql/ExpConst.cs +++ b/SqlSugar/ExpressionsToSql/ExpConst.cs @@ -7,9 +7,16 @@ namespace SqlSugar { internal class ExpConst { - public const string FiledName = "filedName"; - public const string FiledValue = "FiledValue"; - public const string Operator = "Operator"; + public const string BinaryExpressionInfoListKey = "BinaryExpressionInfoListKey"; + public const string BinaryFormatString = " ( {0} {1} {2} ) "; + public const string Format0 = "{0}"; + public const string Format1 = "{1}"; + internal static string GetThrowMessage(string enMessage, string cnMessage, params string[] args) + { + List formatArgs = new List() { enMessage, cnMessage }; + formatArgs.AddRange(args); + return string.Format("\r\n English Message : {0}\r\n Chinese Message : {1}", formatArgs.ToArray()); + } } internal partial class ErrorMessage @@ -19,7 +26,7 @@ namespace SqlSugar { get { - return GetThrowMessage("拉姆达解析出错:不支持{0}此种运算符查找!", + return ExpConst.GetThrowMessage("拉姆达解析出错:不支持{0}此种运算符查找!", "Lambda parsing error: {0} does not support the operator to find!"); } } @@ -27,7 +34,7 @@ namespace SqlSugar { get { - return GetThrowMessage("Expression format error, correct format: it=>it.fieldName", + return ExpConst.GetThrowMessage("Expression format error, correct format: it=>it.fieldName", "表达示格式错误,正确格式: it=>it.fieldName"); } } diff --git a/SqlSugar/ExpressionsToSql/ExpressionContext.cs b/SqlSugar/ExpressionsToSql/ExpressionContext.cs index 836da8797..fe1a56807 100644 --- a/SqlSugar/ExpressionsToSql/ExpressionContext.cs +++ b/SqlSugar/ExpressionsToSql/ExpressionContext.cs @@ -27,7 +27,8 @@ namespace SqlSugar { BaseResolve resolve = new BaseResolve(new ExpressionParameter() { Expression = this.Expression, Context = this }); resolve.Start(); - return resolve.SqlWhere; + if (resolve.SqlWhere == null) return string.Empty; + return resolve.SqlWhere.ToString(); } public List Parameters diff --git a/SqlSugar/ExpressionsToSql/ExpressionParameter.cs b/SqlSugar/ExpressionsToSql/ExpressionParameter.cs index f04d30563..01838cac1 100644 --- a/SqlSugar/ExpressionsToSql/ExpressionParameter.cs +++ b/SqlSugar/ExpressionsToSql/ExpressionParameter.cs @@ -13,7 +13,7 @@ namespace SqlSugar public bool? IsLeft { get; set; } public Expression BaseExpression { get; set; } public int Index { get; set; } - public Dictionary TempData { get; set; } + public List> BinaryExpressionInfoList { get; set; } public ExpressionParameter BaseParameter { get; set; } } } diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs index 4f0a86efc..98e75000b 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs @@ -10,7 +10,7 @@ namespace SqlSugar protected Expression Expression { get; set; } protected Expression BaseExpression { get; set; } public ExpressionContext Context { get; set; } - public string SqlWhere { get; set; } + public StringBuilder SqlWhere { get; set; } public bool? IsLeft { get; set; } public int ContentIndex { get { return this.Context.Index; } } public int Index { get; set; } diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs index f2aaf30eb..d6ff2115a 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs @@ -9,9 +9,14 @@ namespace SqlSugar { public BinaryExpressionResolve(ExpressionParameter parameter) : base(parameter) { - parameter.TempData = new Dictionary(); + parameter.BinaryExpressionInfoList =new List>(); var expression = this.Expression as BinaryExpression; - parameter.TempData.Add(ExpConst.Operator, ExpTool.GetOperator(expression.NodeType)); + var operatorValue = ExpTool.GetOperator(expression.NodeType); + var isComparisonOperator = + expression.NodeType != ExpressionType.And && + expression.NodeType != ExpressionType.AndAlso && + expression.NodeType != ExpressionType.Or && + expression.NodeType != ExpressionType.OrElse; base.BaseExpression = expression; base.IsLeft = true; base.Expression = expression.Left; @@ -20,6 +25,387 @@ namespace SqlSugar base.Expression = expression.Right; base.Start(); base.IsLeft = null; + string leftString = GetLeftString(parameter); + string rightString = GetRightString(parameter); + string binarySql =string.Format(ExpConst.BinaryFormatString,leftString,operatorValue,rightString); + string sqlWhereString = base.SqlWhere.ToString(); + if (base.SqlWhere == null) { + base.SqlWhere = new StringBuilder(); + } + if (sqlWhereString.Contains(ExpConst.Format0)) + { + base.SqlWhere.Replace(ExpConst.Format0, sqlWhereString); + } + else + { + base.SqlWhere.Append(binarySql); + } + if (sqlWhereString.Contains(ExpConst.Format1)) + { + base.SqlWhere.Replace(ExpConst.Format1, ExpConst.Format0); + } + } + + private string GetRightString(ExpressionParameter parameter) + { + var info=parameter.BinaryExpressionInfoList.Single(it => it.Value.IsLeft).Value; + switch (info.ExpressionType) + { + case ExpressionType.Add: + break; + case ExpressionType.AddChecked: + break; + case ExpressionType.And: + break; + case ExpressionType.AndAlso: + break; + case ExpressionType.ArrayLength: + break; + case ExpressionType.ArrayIndex: + break; + case ExpressionType.Call: + break; + case ExpressionType.Coalesce: + break; + case ExpressionType.Conditional: + break; + case ExpressionType.Constant: + break; + case ExpressionType.Convert: + break; + case ExpressionType.ConvertChecked: + break; + case ExpressionType.Divide: + break; + case ExpressionType.Equal: + break; + case ExpressionType.ExclusiveOr: + break; + case ExpressionType.GreaterThan: + break; + case ExpressionType.GreaterThanOrEqual: + break; + case ExpressionType.Invoke: + break; + case ExpressionType.Lambda: + break; + case ExpressionType.LeftShift: + break; + case ExpressionType.LessThan: + break; + case ExpressionType.LessThanOrEqual: + break; + case ExpressionType.ListInit: + break; + case ExpressionType.MemberAccess: + break; + case ExpressionType.MemberInit: + break; + case ExpressionType.Modulo: + break; + case ExpressionType.Multiply: + break; + case ExpressionType.MultiplyChecked: + break; + case ExpressionType.Negate: + break; + case ExpressionType.UnaryPlus: + break; + case ExpressionType.NegateChecked: + break; + case ExpressionType.New: + break; + case ExpressionType.NewArrayInit: + break; + case ExpressionType.NewArrayBounds: + break; + case ExpressionType.Not: + break; + case ExpressionType.NotEqual: + break; + case ExpressionType.Or: + break; + case ExpressionType.OrElse: + break; + case ExpressionType.Parameter: + break; + case ExpressionType.Power: + break; + case ExpressionType.Quote: + break; + case ExpressionType.RightShift: + break; + case ExpressionType.Subtract: + break; + case ExpressionType.SubtractChecked: + break; + case ExpressionType.TypeAs: + break; + case ExpressionType.TypeIs: + break; + case ExpressionType.Assign: + break; + case ExpressionType.Block: + break; + case ExpressionType.DebugInfo: + break; + case ExpressionType.Decrement: + break; + case ExpressionType.Dynamic: + break; + case ExpressionType.Default: + break; + case ExpressionType.Extension: + break; + case ExpressionType.Goto: + break; + case ExpressionType.Increment: + break; + case ExpressionType.Index: + break; + case ExpressionType.Label: + break; + case ExpressionType.RuntimeVariables: + break; + case ExpressionType.Loop: + break; + case ExpressionType.Switch: + break; + case ExpressionType.Throw: + break; + case ExpressionType.Try: + break; + case ExpressionType.Unbox: + break; + case ExpressionType.AddAssign: + break; + case ExpressionType.AndAssign: + break; + case ExpressionType.DivideAssign: + break; + case ExpressionType.ExclusiveOrAssign: + break; + case ExpressionType.LeftShiftAssign: + break; + case ExpressionType.ModuloAssign: + break; + case ExpressionType.MultiplyAssign: + break; + case ExpressionType.OrAssign: + break; + case ExpressionType.PowerAssign: + break; + case ExpressionType.RightShiftAssign: + break; + case ExpressionType.SubtractAssign: + break; + case ExpressionType.AddAssignChecked: + break; + case ExpressionType.MultiplyAssignChecked: + break; + case ExpressionType.SubtractAssignChecked: + break; + case ExpressionType.PreIncrementAssign: + break; + case ExpressionType.PreDecrementAssign: + break; + case ExpressionType.PostIncrementAssign: + break; + case ExpressionType.PostDecrementAssign: + break; + case ExpressionType.TypeEqual: + break; + case ExpressionType.OnesComplement: + break; + case ExpressionType.IsTrue: + break; + case ExpressionType.IsFalse: + break; + default: + break; + } + return info.Value.ObjToString(); + } + + private string GetLeftString(ExpressionParameter parameter) + { + var info = parameter.BinaryExpressionInfoList.Single(it => !it.Value.IsLeft).Value; + switch (info.ExpressionType) + { + case ExpressionType.Add: + break; + case ExpressionType.AddChecked: + break; + case ExpressionType.And: + break; + case ExpressionType.AndAlso: + break; + case ExpressionType.ArrayLength: + break; + case ExpressionType.ArrayIndex: + break; + case ExpressionType.Call: + break; + case ExpressionType.Coalesce: + break; + case ExpressionType.Conditional: + break; + case ExpressionType.Constant: + break; + case ExpressionType.Convert: + break; + case ExpressionType.ConvertChecked: + break; + case ExpressionType.Divide: + break; + case ExpressionType.Equal: + break; + case ExpressionType.ExclusiveOr: + break; + case ExpressionType.GreaterThan: + break; + case ExpressionType.GreaterThanOrEqual: + break; + case ExpressionType.Invoke: + break; + case ExpressionType.Lambda: + break; + case ExpressionType.LeftShift: + break; + case ExpressionType.LessThan: + break; + case ExpressionType.LessThanOrEqual: + break; + case ExpressionType.ListInit: + break; + case ExpressionType.MemberAccess: + break; + case ExpressionType.MemberInit: + break; + case ExpressionType.Modulo: + break; + case ExpressionType.Multiply: + break; + case ExpressionType.MultiplyChecked: + break; + case ExpressionType.Negate: + break; + case ExpressionType.UnaryPlus: + break; + case ExpressionType.NegateChecked: + break; + case ExpressionType.New: + break; + case ExpressionType.NewArrayInit: + break; + case ExpressionType.NewArrayBounds: + break; + case ExpressionType.Not: + break; + case ExpressionType.NotEqual: + break; + case ExpressionType.Or: + break; + case ExpressionType.OrElse: + break; + case ExpressionType.Parameter: + break; + case ExpressionType.Power: + break; + case ExpressionType.Quote: + break; + case ExpressionType.RightShift: + break; + case ExpressionType.Subtract: + break; + case ExpressionType.SubtractChecked: + break; + case ExpressionType.TypeAs: + break; + case ExpressionType.TypeIs: + break; + case ExpressionType.Assign: + break; + case ExpressionType.Block: + break; + case ExpressionType.DebugInfo: + break; + case ExpressionType.Decrement: + break; + case ExpressionType.Dynamic: + break; + case ExpressionType.Default: + break; + case ExpressionType.Extension: + break; + case ExpressionType.Goto: + break; + case ExpressionType.Increment: + break; + case ExpressionType.Index: + break; + case ExpressionType.Label: + break; + case ExpressionType.RuntimeVariables: + break; + case ExpressionType.Loop: + break; + case ExpressionType.Switch: + break; + case ExpressionType.Throw: + break; + case ExpressionType.Try: + break; + case ExpressionType.Unbox: + break; + case ExpressionType.AddAssign: + break; + case ExpressionType.AndAssign: + break; + case ExpressionType.DivideAssign: + break; + case ExpressionType.ExclusiveOrAssign: + break; + case ExpressionType.LeftShiftAssign: + break; + case ExpressionType.ModuloAssign: + break; + case ExpressionType.MultiplyAssign: + break; + case ExpressionType.OrAssign: + break; + case ExpressionType.PowerAssign: + break; + case ExpressionType.RightShiftAssign: + break; + case ExpressionType.SubtractAssign: + break; + case ExpressionType.AddAssignChecked: + break; + case ExpressionType.MultiplyAssignChecked: + break; + case ExpressionType.SubtractAssignChecked: + break; + case ExpressionType.PreIncrementAssign: + break; + case ExpressionType.PreDecrementAssign: + break; + case ExpressionType.PostIncrementAssign: + break; + case ExpressionType.PostDecrementAssign: + break; + case ExpressionType.TypeEqual: + break; + case ExpressionType.OnesComplement: + break; + case ExpressionType.IsTrue: + break; + case ExpressionType.IsFalse: + break; + default: + break; + } + return info.Value.ObjToString(); } } } diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/LambdaExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/LambdaExpressionResolve.cs index 76fdb64e1..b0e4436e2 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/LambdaExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/LambdaExpressionResolve.cs @@ -13,7 +13,8 @@ namespace SqlSugar var expression = lambda.Body; if (expression.NodeType == ExpressionType.MemberAccess) { - base.SqlWhere = "(" + ((MemberExpression)expression).Member.Name + "=1)"; + string appendString = "(" +((MemberExpression)expression).Member.Name + "=1)"; + base.SqlWhere.Append(appendString); } else { diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs index 1e9784285..0a74bb15f 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs @@ -14,10 +14,16 @@ namespace SqlSugar var isSingle = parameter.Context.IsSingle; string fieldName = string.Empty; fieldName = isSingle ? expression.Member.Name : expression.Member.ToString(); - parameter.BaseParameter.TempData.Add(ExpConst.FiledName, fieldName); + parameter.BaseParameter.BinaryExpressionInfoList.Add(new KeyValuePair(ExpConst.BinaryExpressionInfoListKey, new BinaryExpressionInfo() + { + IsLeft = Convert.ToBoolean(IsLeft), + Value = fieldName, + ExpressionType = expression.NodeType + })); if (isLeft == null && base.SqlWhere == null) { - base.SqlWhere = fieldName; + base.SqlWhere = new StringBuilder(); + base.SqlWhere.Append(fieldName); } } }