Synchronization code

This commit is contained in:
sunkaixuan
2023-12-01 22:29:53 +08:00
parent 37b1c2dabc
commit eaded961f0
2 changed files with 36 additions and 0 deletions

View File

@@ -29,6 +29,31 @@ namespace SqlSugar
} }
return isNav; return isNav;
} }
internal static bool IsSqlParameterDbType(ExpressionContext context, Expression member)
{
var isNav = false;
if (context?.SugarContext!=null&&member is MemberExpression && (member as MemberExpression)?.Expression is ParameterExpression expression)
{
var typeEntity= context?.SugarContext.Context.EntityMaintenance.GetEntityInfo(expression.Type);
var columnInfo = typeEntity.Columns.FirstOrDefault(it => it.PropertyName == ExpressionTool.GetMemberName(member));
if (columnInfo.SqlParameterDbType is Type)
{
return true;
}
}
return isNav;
}
internal static SugarParameter GetParameterBySqlParameterDbType(int index,object value,ExpressionContext context, Expression member)
{
var expression=(member as MemberExpression)?.Expression;
var typeEntity = context?.SugarContext.Context.EntityMaintenance.GetEntityInfo(expression.Type);
var columnInfo = typeEntity.Columns.FirstOrDefault(it => it.PropertyName == ExpressionTool.GetMemberName(member));
var columnDbType = columnInfo.SqlParameterDbType as Type;
var ParameterConverter = columnDbType.GetMethod("ParameterConverter").MakeGenericMethod(columnInfo.PropertyInfo.PropertyType);
var obj = Activator.CreateInstance(columnDbType);
var p = ParameterConverter.Invoke(obj, new object[] { value, index }) as SugarParameter;
return p;
}
public static List<string> ExtractMemberNames(Expression expression) public static List<string> ExtractMemberNames(Expression expression)
{ {
var memberNames = new List<string>(); var memberNames = new List<string>();

View File

@@ -465,6 +465,17 @@ namespace SqlSugar
} }
value = result; value = result;
} }
else if (name.IsIn("Contains", "StartsWith", "EndsWith") &&item==args.Last()&& ExpressionTool.IsSqlParameterDbType(this.Context, args.First()))
{
var myvalue = ExpressionTool.DynamicInvoke(args.Last());
var parametre = ExpressionTool.GetParameterBySqlParameterDbType(this.Context.ParameterIndex,myvalue, this.Context, args.First());
this.Context.Parameters.Add(parametre);
methodCallExpressionArgs.MemberName = parametre.ParameterName;
methodCallExpressionArgs.MemberValue = parametre.Value;
methodCallExpressionArgs.IsMember = true;
isRemoveParamter = true;
this.Context.ParameterIndex++;
}
methodCallExpressionArgs.MemberValue = value; methodCallExpressionArgs.MemberValue = value;
if (isRemoveParamter != true) if (isRemoveParamter != true)
{ {