Ejemplo n.º 1
0
        private ObParameterBase CreateWhere(Expression exp)
        {
            ObParameterBase p    = null;
            var             type = NodeType(exp.NodeType);

            if (type == 1)
            {
                if (exp is BinaryExpression biExp)
                {
                    p = CreateWhere(biExp.Left);
                    var pp = CreateWhere(biExp.Right);
                    switch (biExp.NodeType)
                    {
                    case ExpressionType.AndAlso:
                        p = p && pp;
                        break;

                    case ExpressionType.OrElse:
                        p = Factory.ObParameter.Create(p || pp);
                        break;
                    }
                }
            }
            else //if ((14 & type) == type)
            {
                p = CreateParameter(exp);
            }
            return(p);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// 平级AND条件
 /// </summary>
 /// <param name="iObParameter">参数</param>
 /// <returns></returns>
 public override ObParameterBase And(ObParameterBase iObParameter)
 {
     ((ObParameter)iObParameter).BrotherType = 1;
     Brothers.Add(iObParameter);
     return(this);
 }
Ejemplo n.º 3
0
 public static ObParameterBase CreateGroupParameter <T>(this MethodBase currentMethod, T obTerm, ObParameterBase obParameter, IDictionary <string, object> requestParams)
     where T : ObTermBase
 {
     return(TryKey(currentMethod, out var key)
         ? CreateParameter(obTerm, obParameter, requestParams, Config[key].GroupParams)
         : obParameter);
 }
Ejemplo n.º 4
0
        private static ObParameterBase CreateParameter <T>(T obTerm, ObParameterBase obParameter, IDictionary <string, object> requestParams, IDictionary <string, ParamInfo> dictParams)
        {
            if (requestParams == null)
            {
                return(obParameter);
            }
            foreach (var param in dictParams.Where(param => requestParams.ContainsKey(param.Key.Split(',')[0])))
            {
                ObParameterBase subParameter = null;
                foreach (var key in param.Key.Split(','))
                {
                    Type   t;
                    var    pSymbol = param.Value.Symbol;
                    object value;
                    switch (key.ToUpper())
                    {
                    case "NULL":
                        value   = null;
                        pSymbol = "==";
                        t       = typeof(object);
                        break;

                    case "NOT NULL":
                        value   = null;
                        pSymbol = "!=";
                        t       = typeof(object);
                        break;

                    default:
                        try
                        {
                            var requestJsonString = requestParams[key].ToJsonString();
                            if (param.Value.TypeString.Contains("[]") && !Regex.IsMatch(requestJsonString, @"^\[.+\]$"))
                            {
                                requestJsonString = $"[{requestJsonString}]";
                            }
                            t     = Type.GetType(param.Value.TypeString);
                            value = requestJsonString.ToObject(t);
                        }
                        catch (Exception /* er*/)
                        {
                            /*LogUtil.WriteLog("requestJsonString=" + requestJsonString +
                             *               ",paramKey=" + param.Key +
                             *               ",typeString=" + param.Value.TypeString, er);*/
                            continue;
                        }
                        break;
                    }
                    int sret;
                    if ((sret = SymbolTryParse(pSymbol, value, out var symbol, out var dbvalue)) == 0)
                    {
                        continue;
                    }
                    var names = param.Value.Name.Split(',');
                    foreach (var name in names)
                    {
                        var property = GetProperty(obTerm, name);
                        if (property == null)
                        {
                            continue;
                        }

                        #region 如果in或not in时,当数组只有1个值时,转成=或<>

                        var vs = value as ICollection;
                        switch (symbol)
                        {
                        case DbSymbol.In:
                            if (vs != null && vs.Count == 0)
                            {
                                continue;
                            }
                            if (vs != null && vs.Count == 1)
                            {
                                symbol = DbSymbol.Equal;
                                foreach (var v in vs)
                                {
                                    value = v;
                                    break;
                                }
                            }
                            break;

                        case DbSymbol.NotIn:
                            if (vs != null && vs.Count == 0)
                            {
                                continue;
                            }
                            if (vs != null && vs.Count == 1)
                            {
                                symbol = DbSymbol.NotEqual;
                                foreach (var v in vs)
                                {
                                    value = v;
                                    break;
                                }
                            }
                            break;

                        case DbSymbol.Between:
                            if (vs != null && vs.Count != 2)
                            {
                                continue;
                            }

                            /* if (vs != null && t == typeof(DateTime))
                             * {
                             *   if (vs != null && t == typeof(DateTime))
                             *   {
                             *       var ds = vs.OfType<DateTime>().ToList();
                             *       if (ds.Count > 1 &&
                             *           ds[0].TimeOfDay.Ticks == 0 &&
                             *           ds[1].TimeOfDay.Ticks == 0)
                             *       {
                             *           ds[1] = ds[1].Date.AddDays(1).AddSeconds(-1);
                             *           value = ds;
                             *       }
                             *   }
                             * }*/
                            if (vs != null && t == typeof(DateTime[]))
                            {
                                var ds = vs.OfType <DateTime>().ToList();
                                if (ds.Count > 1 &&
                                    ds[0].TimeOfDay.Ticks == 0 &&
                                    ds[1].TimeOfDay.Ticks == 0)
                                {
                                    ds[1] = ds[1].Date.AddDays(1).AddSeconds(-1);
                                    value = ds;
                                }
                            }
                            break;
                        }

                        #endregion

                        if (subParameter == null)
                        {
                            subParameter = sret == 1 ? ObParameter.Create(property, symbol, value) : ObParameter.Create(property, dbvalue);
                        }
                        else
                        {
                            subParameter = subParameter || (sret == 1 ? ObParameter.Create(property, symbol, value) : ObParameter.Create(property, dbvalue));
                        }
                    }
                }
                if (subParameter == null)
                {
                    continue;
                }
                if (obParameter == null)
                {
                    obParameter = ObParameter.Create(subParameter);
                }
                else
                {
                    obParameter = obParameter && ObParameter.Create(subParameter);
                }
            }
            return(obParameter);
        }
Ejemplo n.º 5
0
 public static ObParameterBase CreateParameter <T>(this MethodBase currentMethod, ObParameterBase obParameter, IDictionary <string, object> requestParams)
     where T : ObModelBase
 {
     return(TryKey(currentMethod, out var key)
         ? CreateParameter <T>(null, obParameter, requestParams, Config[key].Params)
         : obParameter);
 }