mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-08-01 10:10:16 +08:00
Update exp to sql
This commit is contained in:
parent
34e08b4d90
commit
26f15c351f
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user