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); } } }
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); } } }
/// <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 }