Update exp to sql

This commit is contained in:
sunkaixuan 2023-10-23 12:36:36 +08:00
parent dc1ce1bd90
commit a89bb5fb5b
2 changed files with 26 additions and 2 deletions

View File

@ -1,5 +1,5 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
@ -46,6 +46,10 @@ namespace SqlSugar
{
AppendMember(parameter, isLeft, value, oppoSiteExpression);
}
else if (ExpressionTool.RemoveConvert(oppoSiteExpression) is MemberExpression)
{
AppendMember(parameter, isLeft, value, ExpressionTool.RemoveConvert(oppoSiteExpression));
}
else if ((oppoSiteExpression is UnaryExpression && (oppoSiteExpression as UnaryExpression).Operand is MemberExpression))
{
value = AppendUnaryExp(parameter, isLeft, value, oppoSiteExpression);
@ -141,7 +145,13 @@ namespace SqlSugar
}
this.Context.Parameters.Add(p);
}
else if (parameter?.BaseParameter?.CommonTempData.ObjToString() == "IsJson=true")
else if (UtilMethods.IsParameterConverter(columnInfo))
{
SugarParameter p = UtilMethods.GetParameterConverter(this.Context.SugarContext.Context, value, oppoSiteExpression, columnInfo);
appendValue = p.ParameterName;
this.Context.Parameters.Add(p);
}
else if (parameter?.BaseParameter?.CommonTempData.ObjToString() == "IsJson=true")
{
this.Context.Parameters.Add(new SugarParameter(appendValue, new SerializeService().SerializeObject(value)) { IsJson=true});
}

View File

@ -19,6 +19,20 @@ namespace SqlSugar
public class UtilMethods
{
internal static bool IsParameterConverter(EntityColumnInfo columnInfo)
{
return columnInfo != null && columnInfo.SqlParameterDbType != null && columnInfo.SqlParameterDbType is Type
&& typeof(ISugarDataConverter).IsAssignableFrom(columnInfo.SqlParameterDbType as Type);
}
internal static SugarParameter GetParameterConverter(ISqlSugarClient db,object value, Expression oppoSiteExpression, EntityColumnInfo columnInfo)
{
var entity = db.EntityMaintenance.GetEntityInfo(oppoSiteExpression.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(obj, new object[] { value, 100 }) as SugarParameter;
return p;
}
internal static bool IsErrorParameterName(ConnectionConfig connectionConfig,DbColumnInfo columnInfo)
{
return connectionConfig.MoreSettings?.IsCorrectErrorSqlParameterName == true &&