/// <summary> /// Transforms the specified item. /// </summary> /// <param name="item">The item.</param> /// <param name="type">The type.</param> /// <returns>IEnumerable<ConditionItem>.</returns> public IEnumerable <ConditionItem> Transform(ConditionItem item, Type type) { DateTime willTime; Type instanceType = TypeUtil.GetUnNullableType(type); if (DateTime.TryParse(item.Value.ToString(), out willTime)) { var method = item.Method; if (method == QueryMethod.LessThan || method == QueryMethod.LessThanOrEqual) { method = QueryMethod.DateTimeLessThanOrEqual; if (willTime.Hour == 0 && willTime.Minute == 0 && willTime.Second == 0) { willTime = willTime.AddDays(1).AddMilliseconds(-1); } } object value = null; if (instanceType == typeof(DateTime)) { value = willTime; } else if (instanceType == typeof(int)) { value = (int)UnixTime.FromDateTime(willTime); } else if (instanceType == typeof(long)) { value = UnixTime.FromDateTime(willTime); } return(new[] { new ConditionItem(item.Field, method, value) }); } return(new[] { new ConditionItem(item.Field, item.Method, Convert.ChangeType(item.Value, type)) }); }
/// <summary> /// Changes the type to expression. /// </summary> /// <param name="item">The item.</param> /// <param name="conversionType">Type of the conversion.</param> /// <returns>Expression.</returns> private static Expression ChangeTypeToExpression(ConditionItem item, Type conversionType) { if (item.Value == null) { return(Expression.Constant(item.Value, conversionType)); } #region 数组 if (item.Method == QueryMethod.StdIn) { var arr = (item.Value as Array); var expList = new List <Expression>(); if (arr != null) { expList.AddRange(arr.Cast <object>().Select((t, i) => ChangeType(arr.GetValue(i), conversionType)).Select(newValue => Expression.Constant(newValue, conversionType))); } return(Expression.NewArrayInit(conversionType, expList)); } #endregion var elementType = TypeUtil.GetUnNullableType(conversionType); var value = Convert.ChangeType(item.Value, elementType); return(Expression.Constant(value, conversionType)); }
/// <summary> /// Matches the specified item. /// </summary> /// <param name="item">The item.</param> /// <param name="type">The type.</param> /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns> public bool Match(ConditionItem item, Type type) { var elementType = TypeUtil.GetUnNullableType(type); return(((elementType == typeof(int) && !(item.Value is int)) || (elementType == typeof(long) && !(item.Value is long)) || (elementType == typeof(DateTime) && !(item.Value is DateTime)) ) && item.Value.ToString().Contains("-")); }
/// <summary> /// Changes the type. /// </summary> /// <param name="value">The value.</param> /// <param name="conversionType">Type of the conversion.</param> /// <returns>System.Object.</returns> private static object ChangeType(object value, Type conversionType) { return(value == null ? null : Convert.ChangeType(value, TypeUtil.GetUnNullableType(conversionType))); }