diff --git a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs index 91de6efd0..f10ab5894 100644 --- a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs +++ b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs @@ -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() + { + new MethodCallExpressionArgs(){ + MemberValue=value.ToSqlValue(), + MemberName=value.ToSqlValue() + } + } + }); + } + else if (columnInfo.UnderType == SqlSugar.UtilConstants.DateType) + { + newValue = ToDate(new MethodCallExpressionModel() + { + Args = new List() + { + 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; + } + } } } diff --git a/Src/Asp.NetCore2/SqlSugar/Utilities/UtilMethods.cs b/Src/Asp.NetCore2/SqlSugar/Utilities/UtilMethods.cs index 4dc85ac0c..7dae3f65b 100644 --- a/Src/Asp.NetCore2/SqlSugar/Utilities/UtilMethods.cs +++ b/Src/Asp.NetCore2/SqlSugar/Utilities/UtilMethods.cs @@ -17,6 +17,57 @@ namespace SqlSugar { public class UtilMethods { + public static bool IsValueTypeArray(object memberValue) + { + return memberValue is List || + memberValue is string[] || + memberValue is List || + memberValue is int[] || + memberValue is List || + memberValue is Guid[] || + memberValue is List || + memberValue is long[] || + memberValue is List || + memberValue is int?[] || + memberValue is List || + memberValue is Guid?[] || + memberValue is List || + memberValue is long?[] || + memberValue is List || + memberValue is float[] || + memberValue is List || + memberValue is double[] || + memberValue is List || + memberValue is decimal[] || + memberValue is List || + memberValue is DateTime[] || + memberValue is List || + memberValue is TimeSpan[] || + memberValue is List || + memberValue is bool[] || + memberValue is List || + memberValue is byte[] || + memberValue is List || + memberValue is char[] || + memberValue is List || + memberValue is short[] || + memberValue is List || + memberValue is ushort[] || + memberValue is List || + memberValue is uint[] || + memberValue is List || + memberValue is ulong[] || + memberValue is List || + memberValue is sbyte[] || + memberValue is List || + memberValue is object[] || + memberValue is List || + memberValue is int?[] || + memberValue is List || + memberValue is Guid?[] || + memberValue is List || + memberValue is long?[]; + } internal static void EndCustomSplitTable(ISqlSugarClient context,Type entityType) { if (context == null || entityType == null)