/// <summary> /// 根据条件对象生成WhereSqlClauseBuilder /// </summary> /// <param name="condition"></param> /// <param name="ignoreDefaultValue"></param> /// <param name="acv"></param> /// <param name="ignoreProperties">需要忽略的属性</param> /// <returns></returns> public static WhereSqlClauseBuilder GetWhereSqlClauseBuilder( object condition, bool ignoreDefaultValue, AdjustConditionValueDelegate acv, params string[] ignoreProperties) { ExceptionHelper.FalseThrow <ArgumentNullException>(condition != null, "condition"); ConditionMappingItemCollection mapping = GetMappingInfo(condition.GetType()); return(GetWhereSqlClauseBuilderFromMapping(condition, mapping.FilterByType <ConditionMappingItem>(), ignoreDefaultValue, acv, ignoreProperties)); }
private static ConnectiveSqlClauseCollection GetConnectiveSqlClauseBuilderFromMapping( object condition, ConditionMappingItemCollection mapping, bool ignoreDefaultValue, AdjustConditionValueDelegate acv, string[] ignoreProperties) { ConnectiveSqlClauseCollection connectiveBuilder = new ConnectiveSqlClauseCollection(); WhereSqlClauseBuilder whereBuilder = GetWhereSqlClauseBuilderFromMapping(condition, mapping.FilterByType <ConditionMappingItem>(), ignoreDefaultValue, acv, ignoreProperties); connectiveBuilder.Add(whereBuilder); FillInSqlClauseBuilderFromMapping(connectiveBuilder, condition, mapping.FilterByType <InConditionMappingItem>(), ignoreDefaultValue, acv, ignoreProperties); return(connectiveBuilder); }
/// <summary> /// 填充IN子句 /// </summary> /// <param name="connectiveBuilder"></param> /// <param name="condition"></param> /// <param name="mapping"></param> /// <param name="ignoreDefaultValue"></param> /// <param name="acv"></param> /// <param name="ignoreProperties">需要忽略的属性</param> private static void FillInSqlClauseBuilderFromMapping( ConnectiveSqlClauseCollection connectiveBuilder, object condition, IEnumerable <InConditionMappingItem> mapping, bool ignoreDefaultValue, AdjustConditionValueDelegate acv, string[] ignoreProperties) { foreach (InConditionMappingItem item in mapping) { if (Array.Exists <string>(ignoreProperties, target => (string.Compare(target, item.PropertyName, true) == 0)) == false) { object data = GetValueFromObject(item, condition); if (data != null) { InSqlClauseBuilder builder = new InSqlClauseBuilder(item.DataFieldName); if (data is IEnumerable && data.GetType().IsPrimitive == false) { foreach (object dataItem in (IEnumerable)data) { DoAdjustValueAndAppendItem(dataItem, item, ignoreDefaultValue, acv, (adJustedData) => builder.AppendItem(item.IsExpression, adJustedData)); } } else { DoAdjustValueAndAppendItem(data, item, ignoreDefaultValue, acv, (adJustedData) => builder.AppendItem(item.IsExpression, adJustedData)); } connectiveBuilder.Add(builder); } } } }
/// <summary> /// 根据条件对象生成WhereSqlClauseBuilder /// </summary> /// <param name="condition"></param> /// <param name="acv"></param> /// <returns></returns> public static WhereSqlClauseBuilder GetWhereSqlClauseBuilder(object condition, AdjustConditionValueDelegate acv) { return(GetWhereSqlClauseBuilder(condition, true, acv)); }
/// <summary> /// 根据条件对象生成WhereSqlClauseBuilder /// </summary> /// <param name="condition"></param> /// <param name="ignoreDefaultValue"></param> /// <param name="acv"></param> /// <returns></returns> public static WhereSqlClauseBuilder GetWhereSqlClauseBuilder( object condition, bool ignoreDefaultValue, AdjustConditionValueDelegate acv) { ExceptionHelper.FalseThrow<ArgumentNullException>(condition != null, "condition"); ConditionMappingItemCollection mapping = GetMappingInfo(condition.GetType()); return GetWhereSqlClauseBuilderFromMapping(condition, mapping, ignoreDefaultValue, acv); }
/// <summary> /// 根据条件对象生成WhereSqlClauseBuilder /// </summary> /// <param name="condition"></param> /// <param name="acv"></param> /// <returns></returns> public static WhereSqlClauseBuilder GetWhereSqlClauseBuilder(object condition, AdjustConditionValueDelegate acv) { return GetWhereSqlClauseBuilder(condition, true, acv); }
private static WhereSqlClauseBuilder GetWhereSqlClauseBuilderFromMapping( object condition, ConditionMappingItemCollection mapping, bool ignoreDefaultValue, AdjustConditionValueDelegate acv) { WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder(); foreach (ConditionMappingItem item in mapping) { object data = GetValueFromObject(item, condition); if (data != null) if (ignoreDefaultValue == false || (ignoreDefaultValue == true && IsTypeDefaultValue(item, data) == false)) { bool ignored = false; data = AdjustValueBeforeAppendToBuilder(item, data); if (acv != null) data = acv(item.PropertyName, data, ref ignored); if (ignored == false) builder.AppendItem(item.DataFieldName, data, item.Operation, item.Template, item.IsExpression); } } return builder; }
/// <summary> /// 根据条件对象生成WhereSqlClauseBuilder /// </summary> /// <param name="condition"></param> /// <param name="acv"></param> /// <param name="ignoreProperties">需要忽略的属性</param> /// <returns></returns> public static WhereSqlClauseBuilder GetWhereSqlClauseBuilder(object condition, AdjustConditionValueDelegate acv, params string[] ignoreProperties) { return(GetWhereSqlClauseBuilder(condition, true, acv, ignoreProperties)); }
/// <summary> /// 调整数据,然后添加到builder中 /// </summary> /// <param name="data"></param> /// <param name="item"></param> /// <param name="ignoreDefaultValue"></param> /// <param name="acv"></param> /// <param name="builderAction"></param> private static void DoAdjustValueAndAppendItem(object data, ConditionMappingItemBase item, bool ignoreDefaultValue, AdjustConditionValueDelegate acv, Action <object> builderAction) { if (data != null) { //有默认表达式,就不能自动忽略默认值 bool needIgnoreDefaultValue = ignoreDefaultValue && item.DefaultExpression.IsNullOrEmpty(); switch (item.DefaultValueUsage) { case DefaultValueUsageType.Ignore: needIgnoreDefaultValue = true; break; case DefaultValueUsageType.UseDefaultValue: needIgnoreDefaultValue = false; break; } //忽略默认值 if (needIgnoreDefaultValue == true && IsTypeDefaultValue(item, data)) { return; } //不忽略默认值,或者本身就不是默认值 object adJustedData = null; //当默认表达式不为空,且为默认值时 if (IsTypeDefaultValue(item, data) && item.DefaultExpression.IsNotEmpty()) { adJustedData = item.DefaultExpression; } else { adJustedData = item.AdjustValue(data); } bool ignored = false; adJustedData = OnAdjustConditionValue(acv, item.PropertyName, adJustedData, ref ignored); if (ignored == false && builderAction != null) { builderAction(adJustedData); } } }