private void AppendItem(ExpressionParameter parameter, string name, IEnumerable <Expression> args, MethodCallExpressionModel model, Expression item) { if (ExpressionTool.IsUnConvertExpress(item)) { item = (item as UnaryExpression).Operand; } var isBinaryExpression = item is BinaryExpression || item is MethodCallExpression; var isConst = item is ConstantExpression; var isIIF = name == "IIF"; var isIFFBoolMember = isIIF && (item is MemberExpression) && (item as MemberExpression).Type == UtilConstants.BoolType; var isIFFUnary = isIIF && (item is UnaryExpression) && (item as UnaryExpression).Operand.Type == UtilConstants.BoolType; var isIFFBoolBinary = isIIF && (item is BinaryExpression) && (item as BinaryExpression).Type == UtilConstants.BoolType; var isIFFBoolMethod = isIIF && (item is MethodCallExpression) && (item as MethodCallExpression).Type == UtilConstants.BoolType; var isFirst = item == args.First(); if (isFirst && isIIF && isConst) { var value = (item as ConstantExpression).Value.ObjToBool() ? this.Context.DbMehtods.True() : this.Context.DbMehtods.False(); var methodCallExpressionArgs = new MethodCallExpressionArgs() { IsMember = true, MemberName = value, MemberValue = value }; model.Args.Add(methodCallExpressionArgs); } else if (isIFFUnary && !isFirst) { AppendModelByIIFMember(parameter, model, (item as UnaryExpression).Operand); } else if (isIFFBoolMember && !isFirst) { AppendModelByIIFMember(parameter, model, item); } else if (isIFFBoolBinary && !isFirst) { AppendModelByIIFBinary(parameter, model, item); } else if (isIFFBoolMethod && !isFirst) { AppendModelByIIFMethod(parameter, model, item); } else if (isBinaryExpression) { model.Args.Add(GetMethodCallArgs(parameter, item)); } else { AppendModel(parameter, model, item); } }
private void GetConfigValue(MethodCallExpression express, ExpressionParameter parameter) { var exp = express.Arguments[0]; var name = Regex.Match(express.Method.ToString(), @"GetConfigValue\[(.+)\]").Groups[1].Value; string code = null; if (express.Arguments.Count > 1) { code = ExpressionTool.GetExpressionValue(express.Arguments[1]) + ""; } var entityDb = SqlFuncExtendsion.TableInfos.FirstOrDefault(y => y.Type.Name == name && y.Code == code); Check.Exception(entityDb == null, string.Format("GetConfigValue no configuration Entity={0} UniqueCode={1}", name, code)); var entity = new ConfigTableInfo() { Code = entityDb.Code, TableName = entityDb.TableName, Key = entityDb.Key, Parameter = new List <SugarParameter>(), Type = entityDb.Type, Value = entityDb.Value, Where = entityDb.Where }; if (entityDb.Parameter != null && entityDb.Parameter.Any()) { foreach (var item in entityDb.Parameter) { entity.Parameter.Add(new SugarParameter("", null) { DbType = item.DbType, Direction = item.Direction, IsArray = item.IsArray, IsJson = item.IsJson, IsNullable = item.IsNullable, IsRefCursor = item.IsRefCursor, ParameterName = item.ParameterName, Size = item.Size, SourceColumn = item.SourceColumn, SourceColumnNullMapping = item.SourceColumnNullMapping, SourceVersion = item.SourceVersion, TempDate = item.TempDate, TypeName = item.TypeName, Value = item.Value, _Size = item._Size }); } } string sql = " (SELECT {0} FROM {1} WHERE {2}={3}"; if (ExpressionTool.IsUnConvertExpress(exp)) { exp = (exp as UnaryExpression).Operand; } var member = exp as MemberExpression; var it = member.Expression; var type = it.Type; var properyName = member.Member.Name; var eqName = string.Format("{0}.{1}", this.Context.GetTranslationColumnName(it.ToString()), this.Context.GetDbColumnName(type.Name, properyName)); if (this.Context.IsSingle) { this.Context.SingleTableNameSubqueryShortName = it.ToString(); } sql = string.Format(sql, entity.Value, this.Context.GetTranslationColumnName(entity.TableName), entity.Key, eqName); if (entity.Parameter != null) { foreach (var item in entity.Parameter) { var oldName = item.ParameterName; item.ParameterName = Regex.Split(oldName, "_con_").First() + "_con_" + this.Context.ParameterIndex; entity.Where = entity.Where.Replace(oldName, item.ParameterName); } this.Context.ParameterIndex++; this.Context.Parameters.AddRange(entity.Parameter); } if (entity.Where.HasValue()) { sql += " AND " + entity.Where; } sql += " )"; if (this.Context.ResolveType.IsIn(ResolveExpressType.SelectMultiple, ResolveExpressType.SelectSingle, ResolveExpressType.Update)) { parameter.BaseParameter.CommonTempData = sql; } else { AppendMember(parameter, parameter.IsLeft, sql); } }