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); }
/// <summary> /// 平级AND条件 /// </summary> /// <param name="iObParameter">参数</param> /// <returns></returns> public override ObParameterBase And(ObParameterBase iObParameter) { ((ObParameter)iObParameter).BrotherType = 1; Brothers.Add(iObParameter); return(this); }
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); }
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); }
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); }