sqlsugar/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubGroupBy.cs

80 lines
2.4 KiB
C#
Raw Normal View History

2025-05-11 16:20:50 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
namespace SqlSugar
{
public class SubGroupBy : ISubOperation
{
public bool HasWhere
{
get; set;
}
public string Name
{
get { return "GroupBy"; }
}
public Expression Expression
{
get; set;
}
public int Sort
{
get
{
return 479;
}
}
public ExpressionContext Context
{
get; set;
}
public string GetValue(Expression expression)
{
var exp = expression as MethodCallExpression;
var argExp = exp.Arguments[0];
var type = ResolveExpressType.FieldSingle;
if ((argExp as LambdaExpression).Body is NewExpression) {
type = ResolveExpressType.ArraySingle;
}
var result = "GROUP BY ";
if (this.Context.JoinIndex == 0)
{
result = result + SubTools.GetMethodValue(this.Context, argExp, type);
}
else
{
if (type == ResolveExpressType.ArraySingle)
{
type= ResolveExpressType.ArrayMultiple;
}
else if (type == ResolveExpressType.FieldSingle)
{
type = ResolveExpressType.FieldMultiple;
}
else if (type == ResolveExpressType.WhereSingle)
{
type = ResolveExpressType.WhereMultiple;
}
result = result + SubTools.GetMethodValueSubJoin(this.Context, argExp, type);
}
result = result.TrimEnd(',');
var selfParameterName = this.Context.GetTranslationColumnName((argExp as LambdaExpression).Parameters.First().Name) + UtilConstants.Dot;
if (this.Context.JoinIndex == 0)
result = result.Replace(selfParameterName, SubTools.GetSubReplace(this.Context));
if (this.Context.CurrentShortName == null)
{
this.Context.CurrentShortName =this.Context.GetTranslationColumnName(ExpressionTool.GetParameters(exp).FirstOrDefault().Name);
}
return result;
}
}
}