Update exp to sql

This commit is contained in:
sunkaixuan 2022-08-06 16:23:08 +08:00
parent e0f68485fb
commit a2506a25c1
2 changed files with 63 additions and 37 deletions

View File

@ -8,6 +8,7 @@ namespace SqlSugar
{ {
public class SubOrderBy : ISubOperation public class SubOrderBy : ISubOperation
{ {
public int OrderIndex { get; set; } = 0;
public bool HasWhere public bool HasWhere
{ {
get; set; get; set;
@ -27,7 +28,7 @@ namespace SqlSugar
{ {
get get
{ {
return 480; return 480+OrderIndex;
} }
} }
@ -44,7 +45,7 @@ namespace SqlSugar
} }
var exp = expression as MethodCallExpression; var exp = expression as MethodCallExpression;
var argExp = exp.Arguments[0]; var argExp = exp.Arguments[0];
var result = "ORDER BY " + SubTools.GetMethodValue(this.Context, argExp, ResolveExpressType.FieldSingle); var result =(OrderIndex==0? "ORDER BY ":",") + SubTools.GetMethodValue(this.Context, argExp, ResolveExpressType.FieldSingle);
var selfParameterName = this.Context.GetTranslationColumnName((argExp as LambdaExpression).Parameters.First().Name) + UtilConstants.Dot; var selfParameterName = this.Context.GetTranslationColumnName((argExp as LambdaExpression).Parameters.First().Name) + UtilConstants.Dot;
result = result.Replace(selfParameterName, SubTools.GetSubReplace(this.Context)); result = result.Replace(selfParameterName, SubTools.GetSubReplace(this.Context));
return result; return result;
@ -52,6 +53,7 @@ namespace SqlSugar
} }
public class SubOrderByDesc : ISubOperation public class SubOrderByDesc : ISubOperation
{ {
public int OrderIndex { get; set; } = 0;
public bool HasWhere public bool HasWhere
{ {
get; set; get; set;
@ -71,7 +73,7 @@ namespace SqlSugar
{ {
get get
{ {
return 480; return 480+OrderIndex;
} }
} }
@ -84,7 +86,7 @@ namespace SqlSugar
{ {
var exp = expression as MethodCallExpression; var exp = expression as MethodCallExpression;
var argExp = exp.Arguments[0]; var argExp = exp.Arguments[0];
var result = "ORDER BY " + SubTools.GetMethodValue(this.Context, argExp, ResolveExpressType.FieldSingle)+" DESC"; var result = (OrderIndex == 0 ? "ORDER BY " : ",") + SubTools.GetMethodValue(this.Context, argExp, ResolveExpressType.FieldSingle)+" DESC";
var selfParameterName = this.Context.GetTranslationColumnName((argExp as LambdaExpression).Parameters.First().Name) + UtilConstants.Dot; var selfParameterName = this.Context.GetTranslationColumnName((argExp as LambdaExpression).Parameters.First().Name) + UtilConstants.Dot;
result = result.Replace(selfParameterName, string.Empty); result = result.Replace(selfParameterName, string.Empty);
return result; return result;

View File

@ -168,41 +168,42 @@ namespace SqlSugar
{ {
var isSubSubQuery = this.allMethods.Select(it => it.ToString()).Any(it => Regex.Matches(it, "Subquery").Count > 1); var isSubSubQuery = this.allMethods.Select(it => it.ToString()).Any(it => Regex.Matches(it, "Subquery").Count > 1);
var isubList = this.allMethods.Select(exp => var isubList = this.allMethods.Select(exp =>
{ {
if (isSubSubQuery) if (isSubSubQuery)
{ {
this.context.JoinIndex = 1; this.context.JoinIndex = 1;
this.context.SubQueryIndex = 0; this.context.SubQueryIndex = 0;
} }
var methodName = exp.Method.Name; var methodName = exp.Method.Name;
var items = SubTools.SubItems(this.context); var items = SubTools.SubItems(this.context);
var item = items.First(s => s.Name == methodName); var item = items.First(s => s.Name == methodName);
if (item is SubWhere && hasWhere == false) if (item is SubWhere && hasWhere == false)
{ {
hasWhere = true; hasWhere = true;
} }
else if (item is SubWhere) else if (item is SubWhere)
{ {
item = items.First(s => s is SubAnd); item = items.First(s => s is SubAnd);
} }
if (item is SubWhereIF && hasWhere == false) if (item is SubWhereIF && hasWhere == false)
{ {
hasWhere = true; hasWhere = true;
} }
else if (item is SubWhereIF) else if (item is SubWhereIF)
{ {
item = items.First(s => s is SubAndIF); item = items.First(s => s is SubAndIF);
} }
else if (item is SubSelectStringJoin) else if (item is SubSelectStringJoin)
{ {
isXmlPath = true; isXmlPath = true;
} }
item.Context = this.context; item.Context = this.context;
item.Expression = exp; item.Expression = exp;
return item; return item;
}).ToList(); }).ToList();
SetOrderByIndex(isubList);
isubList.Insert(0, new SubBegin()); isubList.Insert(0, new SubBegin());
if (isubList.Any(it => it is SubSelect)) if (isubList.Any(it => it is SubSelect))
{ {
@ -229,5 +230,28 @@ namespace SqlSugar
this.context.JoinIndex = 0; this.context.JoinIndex = 0;
return result; return result;
} }
private static void SetOrderByIndex(List<ISubOperation> isubList)
{
var orderByIndex = 0;
var orderByList = isubList.Where(it => it is SubOrderBy || it is SubOrderByDesc).ToList();
if (orderByList.Count > 1)
{
orderByList.Reverse();
foreach (var item in orderByList)
{
if (item is SubOrderBy)
{
(item as SubOrderBy).OrderIndex = orderByIndex;
orderByIndex++;
}
else if (item is SubOrderByDesc)
{
(item as SubOrderByDesc).OrderIndex = orderByIndex;
orderByIndex++;
}
}
}
}
} }
} }