diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/ExpressionTest/Where.cs b/Src/Asp.Net/SqlServerTest/UnitTest/ExpressionTest/Where.cs index 78d5105b4..5569f6ddb 100644 --- a/Src/Asp.Net/SqlServerTest/UnitTest/ExpressionTest/Where.cs +++ b/Src/Asp.Net/SqlServerTest/UnitTest/ExpressionTest/Where.cs @@ -21,6 +21,7 @@ namespace OrmTest.UnitTest base.Begin(); for (int i = 0; i < base.Count; i++) { + whereSingle16(); whereSingle15(); whereSingle1(); whereSingle2(); @@ -264,6 +265,21 @@ namespace OrmTest.UnitTest new SugarParameter("@Const0",1) }, "whereSingle15"); } + + private void whereSingle16() + { + Dictionary dic = new Dictionary(); + dic.Add("key", "x1"); + Expression> exp = it => it.String == dic["key"]; + ExpressionContext expContext = new ExpressionContext(); + expContext.Resolve(exp, ResolveExpressType.WhereSingle); + var value = expContext.Result.GetString(); + var pars = expContext.Parameters; + base.Check(value, pars, "( [String] = @Const0 )", new List() + { + new SugarParameter("@Const0",dic["key"]) + }, "whereSingle16"); + } } public class WhereConst diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs index af9761d70..ed8d4a3e6 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs @@ -158,7 +158,7 @@ namespace SqlSugar return reval; } - public static object DynamicInvoke(MemberExpression expression) + public static object DynamicInvoke(Expression expression) { object value = Expression.Lambda(expression).Compile().DynamicInvoke(); if (value != null && value.GetType().IsClass && value.GetType() != ExpressionConst.StringType) diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs index ab4c67507..4ceec622b 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs @@ -14,6 +14,13 @@ namespace SqlSugar var express = base.Expression as MethodCallExpression; var isLeft = parameter.IsLeft; string methodName = express.Method.Name; + if (methodName == "get_Item") { + string paramterName =this.Context.SqlParameterKeyWord+ExpressionConst.Const + this.Context.ParameterIndex; + this.Context.Parameters.Add(new SugarParameter(paramterName, ExpressionTool.DynamicInvoke(express))); + this.Context.Result.Append(string.Format(" {0} ",paramterName)); + this.Context.ParameterIndex++; + return; + } var isValidNativeMethod = MethodMapping.ContainsKey(methodName)&&express.Method.DeclaringType.Namespace==("System"); if (!isValidNativeMethod&&express.Method.DeclaringType.Namespace.IsIn("System.Linq", "System.Collections.Generic")&&methodName=="Contains") { methodName = "ContainsArray";