Full-text index with multiple fields

This commit is contained in:
sunkaixuan 2023-10-03 13:18:41 +08:00
parent db65a316b7
commit 6a8e49623a
4 changed files with 40 additions and 10 deletions

View File

@ -10,7 +10,20 @@ namespace SqlSugar
{
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)
{
var methodCalls = new List<string>();

View File

@ -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");

View File

@ -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;
}

View File

@ -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<string>)
{
columns = "("+string.Join(",", mode.Args[0].MemberValue as List<string>)+")";
}
var searchWord = mode.Args[1].MemberName;
return $" CONTAINS({columns},{searchWord}) ";
}