Update exp to sql

This commit is contained in:
sunkaixuan 2022-05-10 10:02:20 +08:00
parent 34e08b4d90
commit 26f15c351f
2 changed files with 34 additions and 3 deletions

View File

@ -31,7 +31,14 @@ namespace SqlSugar
if (IsGroupSubquery(expression.Right,operatorValue))
{
InSubGroupBy(expression);
if (ExpressionTool.IsUnConvertExpress(expression.Right))
{
InSubGroupByConvertExpress(expression);
}
else
{
InSubGroupBy(expression);
}
return;
}
@ -98,7 +105,24 @@ namespace SqlSugar
}
}
private void InSubGroupByConvertExpress(BinaryExpression expression)
{
var leftSql = GetNewExpressionValue(expression.Left);
var rightExpression = (expression.Right as UnaryExpression).Operand as MethodCallExpression;
var selector = GetNewExpressionValue(rightExpression.Arguments[0]);
var rightSql = GetNewExpressionValue(rightExpression.Object).Replace("SELECT FROM", $"SELECT {selector} FROM");
if (this.Context.IsSingle && this.Context.SingleTableNameSubqueryShortName == null)
{
var leftExp = expression.Left;
if (leftExp is UnaryExpression)
{
leftExp = (leftExp as UnaryExpression).Operand;
}
var p = (leftExp as MemberExpression);
this.Context.SingleTableNameSubqueryShortName = p.Expression.ToString();
}
base.Context.Result.Append($" {leftSql} in ({rightSql}) ");
}
private void InSubGroupBy(BinaryExpression expression)
{
var leftSql = GetNewExpressionValue(expression.Left);
@ -128,6 +152,10 @@ namespace SqlSugar
{
return false;
}
if (ExpressionTool.IsUnConvertExpress(rightExpression))
{
rightExpression = (rightExpression as UnaryExpression).Operand;
}
if ((rightExpression is MethodCallExpression) == false)
{
return false;

View File

@ -46,7 +46,10 @@ namespace SqlSugar
{
var meExp = expArgs[0] as LambdaExpression;
var selfParameterName = meExp.Parameters.First().Name;
context.SingleTableNameSubqueryShortName = (((meExp.Body as BinaryExpression).Left as MemberExpression).Expression as ParameterExpression).Name;
if ((meExp.Body is BinaryExpression))
{
context.SingleTableNameSubqueryShortName = (((meExp.Body as BinaryExpression).Left as MemberExpression).Expression as ParameterExpression).Name;
}
if (context.SingleTableNameSubqueryShortName == selfParameterName)
{
context.SingleTableNameSubqueryShortName = (((meExp.Body as BinaryExpression).Right as MemberExpression).Expression as ParameterExpression).Name;