Esempio n. 1
0
 public static void CopyDeepDataItem <S, T>(this T target, S source, Expression <Func <T, object> > expressKey = null)
 {
     foreach (var sourceProperty in source.GetType().GetProperties())
     {
         PropertyInfo item = target.GetType().GetProperty(sourceProperty.Name);
         if (item != null && item.DeclaringType.Equals(target.GetType()))
         {
             item.SetValue(target, SafeConverter.SafeToObject(item.PropertyType, sourceProperty.GetValue(source, null)), null);
         }
     }
 }
Esempio n. 2
0
 public static void CopyDataItem <S, T>(this T target, S source, List <string> skipNames)
 {
     foreach (var sourceProperty in source.GetType().GetProperties())
     {
         if (skipNames.Contains(sourceProperty.Name))
         {
             continue;
         }
         PropertyInfo item = target.GetType().GetProperty(sourceProperty.Name);
         if (sourceProperty.DeclaringType.Equals(source.GetType()) && item != null)
         {
             item.SetValue(target, SafeConverter.SafeToObject(item.PropertyType, sourceProperty.GetValue(source, null)), null);
         }
     }
 }
Esempio n. 3
0
        /// <summary>
        /// 根据 直接 表达式 转换成 Lambda 表达式
        /// </summary>
        /// <typeparam name="T">表达式方法类型</typeparam>
        /// <param name="propertyName">字段名</param>
        /// <param name="propertyValue">比较值</param>
        /// <param name="expression">直接表达式</param>
        /// <returns></returns>
        public static Expression <Func <T, bool> > GetExpressionByString <T>(string propertyName, object propertyValue,
                                                                             string expression)
        {
            expression = expression.Trim().ToLower();
            string value = SafeConverter.SafeToStr(propertyValue);

            //转String
            if ((value.Length > 1) && (value[0] == '\''))
            {
                value = value.Substring(1);

                if ((value.Length > 1) && (value[value.Length - 1] == '\''))
                {
                    value = value.Substring(0, value.Length - 1);
                }

                propertyValue = value;
            }

            //格式化类型
            Type         type         = typeof(T);
            PropertyInfo propertyInfo = type.GetProperty(propertyName); //获取指定名称的属性

            if (propertyInfo == null)
            {
                throw new Exception("条件中的字段名不存在,请检查。");
            }
            propertyValue = SafeConverter.SafeToObject(propertyInfo.PropertyType, propertyValue);

            string lambadaExpression = $"{propertyName}{expression}@0";

            object[] values = new object[] { propertyValue };
            return(System.Linq.Dynamic.DynamicExpression.ParseLambda <T, bool>(lambadaExpression, values));

            #region 获取Lambda表达式 - 之前的方法,已删除

            //if ((expression == "=") || (expression == "=="))
            //{
            //    return CreateEqual<T>(propertyName, propertyValue);
            //}
            //else if (expression == "!=")
            //{
            //    return CreateNotEqual<T>(propertyName, propertyValue);
            //}
            //else if (expression == "like")
            //{
            //    return GetContains<T>(propertyName, propertyValue);
            //}
            //else if (expression == "notlike")
            //{
            //    return GetNotContains<T>(propertyName, propertyValue);
            //}
            //else if (expression == ">")
            //{
            //    return CreateGreaterThan<T>(propertyName, propertyValue);
            //}
            //else if (expression == ">=")
            //{
            //    return CreateGreaterThanOrEqual<T>(propertyName, propertyValue);
            //}
            //else if (expression == "<")
            //{
            //    return CreateLessThan<T>(propertyName, propertyValue);
            //}
            //else if (expression == "<=")
            //{
            //    return CreateLessThanOrEqual<T>(propertyName, propertyValue);
            //}
            //else
            //{
            //    return False<T>();
            //}

            //#endregion
            //#region 获取Lambda表达式

            //if ((expression == "=") || (expression == "=="))
            //{
            //    return CreateEqual<T>(propertyName, propertyValue);
            //}
            //else if (expression == "!=")
            //{
            //    return CreateNotEqual<T>(propertyName, propertyValue);
            //}
            //else if (expression == "like")
            //{
            //    return GetContains<T>(propertyName, propertyValue);
            //}
            //else if (expression == "notlike")
            //{
            //    return GetNotContains<T>(propertyName, propertyValue);
            //}
            //else if (expression == ">")
            //{
            //    return CreateGreaterThan<T>(propertyName, propertyValue);
            //}
            //else if (expression == ">=")
            //{
            //    return CreateGreaterThanOrEqual<T>(propertyName, propertyValue);
            //}
            //else if (expression == "<")
            //{
            //    return CreateLessThan<T>(propertyName, propertyValue);
            //}
            //else if (expression == "<=")
            //{
            //    return CreateLessThanOrEqual<T>(propertyName, propertyValue);
            //}
            //else
            //{
            //    return False<T>();
            //}

            #endregion
        }