Synchronization code

This commit is contained in:
sunkaixuan 2023-06-05 00:05:47 +08:00
parent 9887169f1d
commit b1f8234606
2 changed files with 150 additions and 0 deletions

View File

@ -752,6 +752,10 @@ namespace SqlSugar
public string ListAny(MethodCallExpressionModel model)
{
if (IsArrayAnyParameter(model))
{
return ListArrayAny(model);
}
StringBuilder sb = new StringBuilder();
if (model.Args[0].MemberValue!=null&&(model.Args[0].MemberValue as IList).Count>0)
{
@ -834,5 +838,100 @@ namespace SqlSugar
{
return "("+model.Args[0].MemberName + " % "+ model.Args[1].MemberName+")";
}
private static bool IsArrayAnyParameter(MethodCallExpressionModel model)
{
var memberValue = model?.Args?.FirstOrDefault()?.MemberValue;
return UtilMethods.IsValueTypeArray(memberValue);
}
private string ListArrayAny(MethodCallExpressionModel model)
{
StringBuilder sb = new StringBuilder();
if (model.Args[0].MemberValue != null && (model.Args[0].MemberValue as IList).Count > 0)
{
sb.Append(" ( ");
var listPar = model.Args[1].MemberValue as ListAnyParameter;
foreach (var item in (model.Args[0].MemberValue as IList))
{
var sql = listPar.Sql;
if (sb.Length > 3)
{
sb.Append("OR");
}
foreach (var columnInfo in listPar.Columns)
{
var value = item;
var newValue = "null";
if (value != null)
{
if (UtilMethods.IsNumber(columnInfo.UnderType.Name))
{
newValue = value.ToString();
}
else if (columnInfo.UnderType == SqlSugar.UtilConstants.GuidType)
{
newValue = ToGuid(new MethodCallExpressionModel()
{
Args = new List<MethodCallExpressionArgs>()
{
new MethodCallExpressionArgs(){
MemberValue=value.ToSqlValue(),
MemberName=value.ToSqlValue()
}
}
});
}
else if (columnInfo.UnderType == SqlSugar.UtilConstants.DateType)
{
newValue = ToDate(new MethodCallExpressionModel()
{
Args = new List<MethodCallExpressionArgs>()
{
new MethodCallExpressionArgs(){
MemberValue=UtilMethods.GetConvertValue( value).ToSqlValue(),
MemberName=UtilMethods.GetConvertValue( value).ToSqlValue()
}
}
});
}
else
{
newValue = value.ToSqlValue();
}
}
//Regex regex = new Regex("\@");
if (!sql.Contains("@"))
{
sql = sql.Replace(" =)", $" = {newValue})");
if (!sql.Contains(newValue))
{
sql = sql.Replace(" )", $" = {newValue})");
}
}
else
{
Regex reg = new Regex(@"@MethodConst\d+");
sql = reg.Replace(sql, it =>
{
return " " + newValue + " ";
});
}
}
sb.Append(sql);
}
sb.Append(" ) ");
}
var result = sb.ToString();
if (result.IsNullOrEmpty())
{
return " 1=2 ";
}
else
{
return result;
}
}
}
}

View File

@ -17,6 +17,57 @@ namespace SqlSugar
{
public class UtilMethods
{
public static bool IsValueTypeArray(object memberValue)
{
return memberValue is List<string> ||
memberValue is string[] ||
memberValue is List<int> ||
memberValue is int[] ||
memberValue is List<Guid> ||
memberValue is Guid[] ||
memberValue is List<long> ||
memberValue is long[] ||
memberValue is List<int?> ||
memberValue is int?[] ||
memberValue is List<Guid?> ||
memberValue is Guid?[] ||
memberValue is List<long?> ||
memberValue is long?[] ||
memberValue is List<float> ||
memberValue is float[] ||
memberValue is List<double> ||
memberValue is double[] ||
memberValue is List<decimal> ||
memberValue is decimal[] ||
memberValue is List<DateTime> ||
memberValue is DateTime[] ||
memberValue is List<TimeSpan> ||
memberValue is TimeSpan[] ||
memberValue is List<bool> ||
memberValue is bool[] ||
memberValue is List<byte> ||
memberValue is byte[] ||
memberValue is List<char> ||
memberValue is char[] ||
memberValue is List<short> ||
memberValue is short[] ||
memberValue is List<ushort> ||
memberValue is ushort[] ||
memberValue is List<uint> ||
memberValue is uint[] ||
memberValue is List<ulong> ||
memberValue is ulong[] ||
memberValue is List<sbyte> ||
memberValue is sbyte[] ||
memberValue is List<object> ||
memberValue is object[] ||
memberValue is List<int?> ||
memberValue is int?[] ||
memberValue is List<Guid?> ||
memberValue is Guid?[] ||
memberValue is List<long?> ||
memberValue is long?[];
}
internal static void EndCustomSplitTable(ISqlSugarClient context,Type entityType)
{
if (context == null || entityType == null)