Synchronization code

This commit is contained in:
sunkaixuan
2023-10-03 13:34:25 +08:00
parent 59bf8c2cb9
commit 965d2d89bd
8 changed files with 56 additions and 10 deletions

View File

@@ -10,7 +10,20 @@ namespace SqlSugar
{ {
public class ExpressionTool public class ExpressionTool
{ {
public static List<string> GetNewArrayMembers(NewArrayExpression newArrayExpression)
{
List<string> strings = new List<string>();
// 获取数组元素的 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<string> GetTopLevelMethodCalls(Expression expression) public static List<string> GetTopLevelMethodCalls(Expression expression)
{ {
var methodCalls = new List<string>(); var methodCalls = new List<string>();

View File

@@ -1083,6 +1083,10 @@ namespace SqlSugar
public virtual string FullTextContains(MethodCallExpressionModel mode) public virtual string FullTextContains(MethodCallExpressionModel mode)
{ {
var columns = mode.Args[0].MemberName; var columns = mode.Args[0].MemberName;
if (mode.Args[0].MemberValue is List<string>)
{
columns = string.Join("|| ' ' ||", mode.Args[0].MemberValue as List<string>) ;
}
var searchWord = mode.Args[1].MemberName; var searchWord = mode.Args[1].MemberName;
return $"to_tsvector('chinese', {columns}) @@ to_tsquery('chinese', {searchWord})"; return $"to_tsvector('chinese', {columns}) @@ to_tsquery('chinese', {searchWord})";
} }

View File

@@ -9,7 +9,10 @@ namespace SqlSugar
{ {
public partial class SqlFunc 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) public static bool FullTextContains(string columnName,string keyword)
{ {
throw new NotSupportedException("Can only be used in expressions"); throw new NotSupportedException("Can only be used in expressions");

View File

@@ -354,6 +354,7 @@ namespace SqlSugar
{ {
parameter.CommonTempData = CommonTempDataType.Result; parameter.CommonTempData = CommonTempDataType.Result;
base.Expression = item; base.Expression = item;
var isRemoveParamter = false;
if (item.Type == UtilConstants.DateType && parameter.CommonTempData.ObjToString() == CommonTempDataType.Result.ToString() && item.ToString() == "DateTime.Now.Date") if (item.Type == UtilConstants.DateType && parameter.CommonTempData.ObjToString() == CommonTempDataType.Result.ToString() && item.ToString() == "DateTime.Now.Date")
{ {
parameter.CommonTempData = DateTime.Now.Date; parameter.CommonTempData = DateTime.Now.Date;
@@ -391,10 +392,16 @@ namespace SqlSugar
return res; return res;
}).ToArray(); }).ToArray();
} }
else if (name == "Format" && item is ConstantExpression) else if (name == "Format" && item is ConstantExpression)
{ {
parameter.CommonTempData = ExpressionTool.GetExpressionValue(item); 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 else
{ {
base.Start(); base.Start();
@@ -451,15 +458,18 @@ namespace SqlSugar
value = result; value = result;
} }
methodCallExpressionArgs.MemberValue = value; 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); model.Args.Add(methodCallExpressionArgs);
parameter.ChildExpression = null; parameter.ChildExpression = null;
} }

View File

@@ -268,6 +268,10 @@ namespace SqlSugar
public override string FullTextContains(MethodCallExpressionModel mode) public override string FullTextContains(MethodCallExpressionModel mode)
{ {
var columns = mode.Args[0].MemberName; var columns = mode.Args[0].MemberName;
if (mode.Args[0].MemberValue is List<string>)
{
columns = "(" + string.Join(",", mode.Args[0].MemberValue as List<string>) + ")";
}
var searchWord = mode.Args[1].MemberName; var searchWord = mode.Args[1].MemberName;
return $" CONTAINS({columns}, {searchWord}, 1) "; return $" CONTAINS({columns}, {searchWord}, 1) ";
} }

View File

@@ -265,6 +265,10 @@ namespace SqlSugar
public override string FullTextContains(MethodCallExpressionModel mode) public override string FullTextContains(MethodCallExpressionModel mode)
{ {
var columns = mode.Args[0].MemberName; var columns = mode.Args[0].MemberName;
if (mode.Args[0].MemberValue is List<string>)
{
columns = string.Join(",", mode.Args[0].MemberValue as List<string>) ;
}
var searchWord = mode.Args[1].MemberName; var searchWord = mode.Args[1].MemberName;
return $" MATCH({columns}) AGAINST({searchWord}) "; return $" MATCH({columns}) AGAINST({searchWord}) ";
} }

View File

@@ -398,6 +398,10 @@ namespace SqlSugar
public override string FullTextContains(MethodCallExpressionModel mode) public override string FullTextContains(MethodCallExpressionModel mode)
{ {
var columns = mode.Args[0].MemberName; var columns = mode.Args[0].MemberName;
if (mode.Args[0].MemberValue is List<string>)
{
columns = "(" + string.Join(",", mode.Args[0].MemberValue as List<string>) + ")";
}
var searchWord = mode.Args[1].MemberName; var searchWord = mode.Args[1].MemberName;
return $" CONTAINS({columns}, {searchWord}, 1) "; return $" CONTAINS({columns}, {searchWord}, 1) ";
} }

View File

@@ -143,6 +143,10 @@ namespace SqlSugar
public override string FullTextContains(MethodCallExpressionModel mode) public override string FullTextContains(MethodCallExpressionModel mode)
{ {
var columns = mode.Args[0].MemberName; var columns = mode.Args[0].MemberName;
if (mode.Args[0].MemberValue is List<string>)
{
columns = "("+string.Join(",", mode.Args[0].MemberValue as List<string>)+")";
}
var searchWord = mode.Args[1].MemberName; var searchWord = mode.Args[1].MemberName;
return $" CONTAINS({columns},{searchWord}) "; return $" CONTAINS({columns},{searchWord}) ";
} }