diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs index 71c8a5803..d162cd157 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs @@ -10,7 +10,20 @@ namespace SqlSugar { public class ExpressionTool { - + public static List GetNewArrayMembers(NewArrayExpression newArrayExpression) + { + List strings = new List(); + // 获取数组元素的 MemberExpression,并输出属性名 + foreach (var expression in newArrayExpression.Expressions) + { + var memberExpression = expression as MemberExpression; + if (memberExpression != null) + { + strings.Add(memberExpression.Member.Name); + } + } + return strings; + } public static List GetTopLevelMethodCalls(Expression expression) { var methodCalls = new List(); diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs index 83bba3dc4..ed954c8df 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs @@ -1083,6 +1083,10 @@ namespace SqlSugar public virtual string FullTextContains(MethodCallExpressionModel mode) { var columns = mode.Args[0].MemberName; + if (mode.Args[0].MemberValue is List) + { + columns = string.Join("|| ' ' ||", mode.Args[0].MemberValue as List) ; + } var searchWord = mode.Args[1].MemberName; return $"to_tsvector('chinese', {columns}) @@ to_tsquery('chinese', {searchWord})"; } diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs index b4bf50c2c..cf912533b 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs @@ -9,7 +9,10 @@ namespace SqlSugar { public partial class SqlFunc { - + public static bool FullTextContains(string [] columnNames, string keyword) + { + throw new NotSupportedException("Can only be used in expressions"); + } public static bool FullTextContains(string columnName,string keyword) { throw new NotSupportedException("Can only be used in expressions"); diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve_Helper.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve_Helper.cs index d40aa8594..b764cfc99 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve_Helper.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve_Helper.cs @@ -354,6 +354,7 @@ namespace SqlSugar { parameter.CommonTempData = CommonTempDataType.Result; base.Expression = item; + var isRemoveParamter = false; if (item.Type == UtilConstants.DateType && parameter.CommonTempData.ObjToString() == CommonTempDataType.Result.ToString() && item.ToString() == "DateTime.Now.Date") { parameter.CommonTempData = DateTime.Now.Date; @@ -391,10 +392,16 @@ namespace SqlSugar return res; }).ToArray(); } - else if (name == "Format" && item is ConstantExpression) + else if (name == "Format" && item is ConstantExpression) { parameter.CommonTempData = ExpressionTool.GetExpressionValue(item); } + else if (name == "FullTextContains" && item is NewArrayExpression) + { + var array = ExpressionTool.GetNewArrayMembers(item as NewArrayExpression); + parameter.CommonTempData = array; + isRemoveParamter = true; + } else { base.Start(); @@ -451,15 +458,18 @@ namespace SqlSugar value = result; } methodCallExpressionArgs.MemberValue = value; - if (value == null&&item!=null) + if (isRemoveParamter != true) { - this.Context.Parameters.Add(new SugarParameter(parameterName, value,UtilMethods.GetUnderType( item.Type))); + if (value == null && item != null) + { + this.Context.Parameters.Add(new SugarParameter(parameterName, value, UtilMethods.GetUnderType(item.Type))); + } + else + { + this.Context.Parameters.Add(new SugarParameter(parameterName, value)); + } } - else - { - this.Context.Parameters.Add(new SugarParameter(parameterName, value)); - } - } + } model.Args.Add(methodCallExpressionArgs); parameter.ChildExpression = null; } diff --git a/Src/Asp.Net/SqlSugar/Realization/Dm/SqlBuilder/DmExpressionContext.cs b/Src/Asp.Net/SqlSugar/Realization/Dm/SqlBuilder/DmExpressionContext.cs index 839fc0c6f..1ef1481f1 100644 --- a/Src/Asp.Net/SqlSugar/Realization/Dm/SqlBuilder/DmExpressionContext.cs +++ b/Src/Asp.Net/SqlSugar/Realization/Dm/SqlBuilder/DmExpressionContext.cs @@ -268,6 +268,10 @@ namespace SqlSugar public override string FullTextContains(MethodCallExpressionModel mode) { var columns = mode.Args[0].MemberName; + if (mode.Args[0].MemberValue is List) + { + columns = "(" + string.Join(",", mode.Args[0].MemberValue as List) + ")"; + } var searchWord = mode.Args[1].MemberName; return $" CONTAINS({columns}, {searchWord}, 1) "; } diff --git a/Src/Asp.Net/SqlSugar/Realization/MySql/SqlBuilder/MySqlExpressionContext.cs b/Src/Asp.Net/SqlSugar/Realization/MySql/SqlBuilder/MySqlExpressionContext.cs index 5a9ad9925..16d7a1efa 100644 --- a/Src/Asp.Net/SqlSugar/Realization/MySql/SqlBuilder/MySqlExpressionContext.cs +++ b/Src/Asp.Net/SqlSugar/Realization/MySql/SqlBuilder/MySqlExpressionContext.cs @@ -265,6 +265,10 @@ namespace SqlSugar public override string FullTextContains(MethodCallExpressionModel mode) { var columns = mode.Args[0].MemberName; + if (mode.Args[0].MemberValue is List) + { + columns = string.Join(",", mode.Args[0].MemberValue as List) ; + } var searchWord = mode.Args[1].MemberName; return $" MATCH({columns}) AGAINST({searchWord}) "; } diff --git a/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleExpressionContext.cs b/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleExpressionContext.cs index 736ac401f..725a8a89c 100644 --- a/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleExpressionContext.cs +++ b/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleExpressionContext.cs @@ -398,6 +398,10 @@ namespace SqlSugar public override string FullTextContains(MethodCallExpressionModel mode) { var columns = mode.Args[0].MemberName; + if (mode.Args[0].MemberValue is List) + { + columns = "(" + string.Join(",", mode.Args[0].MemberValue as List) + ")"; + } var searchWord = mode.Args[1].MemberName; return $" CONTAINS({columns}, {searchWord}, 1) "; } diff --git a/Src/Asp.Net/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerExpressionContext.cs b/Src/Asp.Net/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerExpressionContext.cs index d6fb7f9ae..1ebf004df 100644 --- a/Src/Asp.Net/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerExpressionContext.cs +++ b/Src/Asp.Net/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerExpressionContext.cs @@ -143,6 +143,10 @@ namespace SqlSugar public override string FullTextContains(MethodCallExpressionModel mode) { var columns = mode.Args[0].MemberName; + if (mode.Args[0].MemberValue is List) + { + columns = "("+string.Join(",", mode.Args[0].MemberValue as List)+")"; + } var searchWord = mode.Args[1].MemberName; return $" CONTAINS({columns},{searchWord}) "; }