Exemplo n.º 1
0
        /// <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));
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        /// <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);
                    }
                }
            }
        }
Exemplo n.º 4
0
 /// <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));
 }
Exemplo n.º 5
0
		/// <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);
		}
Exemplo n.º 6
0
		/// <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);
		}
Exemplo n.º 7
0
		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;
		}
Exemplo n.º 8
0
 /// <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));
 }
Exemplo n.º 9
0
        /// <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);
                }
            }
        }