mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2026-02-26 13:43:10 +08:00
Update custom convert
This commit is contained in:
@@ -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++;
|
||||
|
||||
@@ -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++;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user