Update custom convert

This commit is contained in:
sunkaixuan
2023-03-03 23:51:22 +08:00
parent 8baf0261f8
commit f4f42f05c4
6 changed files with 81 additions and 5 deletions

View File

@@ -287,7 +287,7 @@ namespace SqlSugar
else if (columnInfo.SqlParameterDbType is Type)
{
var type=columnInfo.SqlParameterDbType as Type;
var ParameterConverter=type.GetMethod("ParameterConverter");
var ParameterConverter=type.GetMethod("ParameterConverter").MakeGenericMethod(columnInfo.PropertyType);
//var obj=Activator.CreateInstance(type);
var p = ParameterConverter.Invoke(null,new object[] {columnInfo.Value, GetDbColumnIndex }) as SugarParameter;
GetDbColumnIndex++;

View File

@@ -404,7 +404,7 @@ namespace SqlSugar
else if (columnInfo.SqlParameterDbType is Type)
{
var type = columnInfo.SqlParameterDbType as Type;
var ParameterConverter = type.GetMethod("ParameterConverter");
var ParameterConverter = type.GetMethod("ParameterConverter").MakeGenericMethod(columnInfo.PropertyType);
//var obj = Activator.CreateInstance(type);
var p = ParameterConverter.Invoke(null,new object[] { columnInfo.Value, GetDbColumnIndex }) as SugarParameter;
GetDbColumnIndex++;

View File

@@ -9,11 +9,19 @@ namespace SqlSugar.DbConvert
{
public static class EnumToStringConvert
{
public static SugarParameter ParameterConverter(object value, int i)
public static SugarParameter ParameterConverter<T>(object value, int i)
{
var name = "@myenmu" + i;
var enumToString = value?.ToString();
return new SugarParameter(name, enumToString);
Type undertype = SqlSugar.UtilMethods.GetUnderType(typeof(T));//获取没有nullable的枚举类型
if (value == null)
{
return new SugarParameter(name, null);
}
else
{
var enumObjString = Enum.Parse(undertype, value + "").ToString();
return new SugarParameter(name, enumObjString);
}
}
public static T QueryConverter<T>(this IDataRecord dr, int i)

View File

@@ -216,6 +216,13 @@ namespace SqlSugar
this.Context.Parameters.Add(new SugarParameter(parameterName, paramterValue));
return parameterName;
}
protected string AppendParameter(SugarParameter p)
{
p.ParameterName= p.ParameterName + this.Context.ParameterIndex;
this.Context.ParameterIndex++; ;
this.Context.Parameters.Add(p);
return p.ParameterName;
}
protected void AppendNot(object Value)
{
var isAppend = !this.Context.Result.Contains(ExpressionConst.FormatSymbol);

View File

@@ -131,6 +131,11 @@ namespace SqlSugar
base.ExactExpression = expression;
var leftExpression = expression.Left;
var rightExpression = expression.Right;
if (operatorValue == "="&& ExpressionTool.RemoveConvert(leftExpression) is ConstantExpression)
{
leftExpression = expression.Right;
rightExpression = expression.Left;
}
if (RightIsHasValue(leftExpression, rightExpression,ExpressionTool.IsLogicOperator(expression)))
{
Expression trueValue = Expression.Constant(true);

View File

@@ -11,6 +11,62 @@ namespace SqlSugar
public ConstantExpressionResolve(ExpressionParameter parameter) : base(parameter)
{
var expression = base.Expression as ConstantExpression;
string customParameter = GetCustomParameter(parameter, expression);
if (customParameter == null)
{
DefaultConstant(parameter, expression);
}
else
{
CustomConstant(parameter, customParameter);
}
}
private void CustomConstant(ExpressionParameter parameter, string customParameter)
{
var baseParameter = parameter.BaseParameter;
var isSetTempData = baseParameter.CommonTempData.HasValue() && baseParameter.CommonTempData.Equals(CommonTempDataType.Result);
if (isSetTempData)
{
baseParameter.CommonTempData = customParameter;
}
else
{
AppendMember(parameter, parameter.IsLeft, customParameter);
}
}
private string GetCustomParameter(ExpressionParameter parameter, ConstantExpression expression)
{
string customParameter = null;
if (parameter.OppsiteExpression != null)
{
var exp = ExpressionTool.RemoveConvert(parameter.OppsiteExpression);
if (exp is MemberExpression)
{
var member = (exp as MemberExpression);
var memberParent = member.Expression;
if (memberParent != null)
{
var entity = this.Context.SugarContext.Context.EntityMaintenance.GetEntityInfo(memberParent.Type);
var columnInfo = entity.Columns.FirstOrDefault(it => it.PropertyName == member.Member.Name);
if (columnInfo.SqlParameterDbType is Type)
{
var type = columnInfo.SqlParameterDbType as Type;
var ParameterConverter = type.GetMethod("ParameterConverter").MakeGenericMethod(columnInfo.PropertyInfo.PropertyType);
//var obj=Activator.CreateInstance(type);
var p = ParameterConverter.Invoke(null, new object[] { expression.Value, 100 }) as SugarParameter;
customParameter = base.AppendParameter(p);
}
}
}
}
return customParameter;
}
private void DefaultConstant(ExpressionParameter parameter, ConstantExpression expression)
{
var isLeft = parameter.IsLeft;
object value = ExpressionTool.GetValue(expression.Value, this.Context);
value = ConvetValue(parameter, expression, value);