From 818d335ec7f7c8f3b1a2e0e03a83b3332cde27b9 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 20 Dec 2022 20:21:06 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20ISelectGrouping=20ToSq?= =?UTF-8?q?l=20AsProperty=20=E5=88=AB=E5=90=8D=E6=97=A0=E6=95=88=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Examples/base_entity/Program.cs | 16 ++++++++++++++ FreeSql/Internal/CommonExpression.cs | 22 +++++++++++++------ .../SelectProvider/SelectGroupingProvider.cs | 7 +++++- 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index bcb43906..3dad8a00 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -487,6 +487,22 @@ namespace base_entity BaseEntity.Initialization(fsql, () => _asyncUow.Value); #endregion + var groupsql01 = fsql.Select() + .GroupBy(a => new + { + djjg = a.Id, + qllx = a.Nickname, + hjhs = a.GroupId + }) + .ToSql(g => new + { + g.Key.djjg, + g.Key.qllx, + xhjsl = g.Count(g.Key.djjg), + hjzhs = g.Sum(g.Key.hjhs), + blywsl = g.Count() + }, FieldAliasOptions.AsProperty); + using (var uow = fsql.CreateUnitOfWork()) { uow.Orm.Select().ForUpdate().ToList(); diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 671a7e7c..656de788 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -277,15 +277,23 @@ namespace FreeSql.Internal return false; } if (parent.CsType == null) parent.CsType = exp.Type; - var pdbfield = parent.DbField = ExpressionLambdaToSql(exp, getTSC()); - if (parent.MapType == null || _tables?.Any(a => a.Table?.IsRereadSql == true) == true) + try { - var findcol = SearchColumnByField(_tables, null, parent.DbField); - if (parent.MapType == null) parent.MapType = findcol?.Attribute.MapType ?? exp.Type; - if (findcol != null) pdbfield = _common.RereadColumn(findcol, pdbfield); + var pdbfield = parent.DbField = ExpressionLambdaToSql(exp, getTSC()); + if (parent.MapType == null || _tables?.Any(a => a.Table?.IsRereadSql == true) == true) + { + var findcol = SearchColumnByField(_tables, null, parent.DbField); + if (parent.MapType == null) parent.MapType = findcol?.Attribute.MapType ?? exp.Type; + if (findcol != null) pdbfield = _common.RereadColumn(findcol, pdbfield); + } + field.Append(", ").Append(pdbfield); + LocalSetFieldAlias(ref index, _tables != null || + SelectGroupingProvider._ParseExpOnlyDbField.Value != pdbfield); + } + finally + { + SelectGroupingProvider._ParseExpOnlyDbField.Value = null; } - field.Append(", ").Append(pdbfield); - LocalSetFieldAlias(ref index, true); return false; } return false; diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs index 7d26c47e..c719221f 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs @@ -31,6 +31,7 @@ namespace FreeSql.Internal.CommonProvider _tables = tables; } + public static ThreadLocal _ParseExpOnlyDbField = new ThreadLocal(); public override string ParseExp(Expression[] members) { ParseExpMapResult = null; @@ -52,7 +53,11 @@ namespace FreeSql.Internal.CommonProvider } ParseExpMapResult = read; if (!_addFieldAlias) return read.DbField; - if (_comonExp.EndsWithDbNestedField(read.DbField, read.DbNestedField) == false) return $"{read.DbField}{_comonExp._common.FieldAsAlias(read.DbNestedField)}"; + if (_comonExp.EndsWithDbNestedField(read.DbField, read.DbNestedField) == false) + { + _ParseExpOnlyDbField.Value = read.DbField; + return $"{read.DbField}{_comonExp._common.FieldAsAlias(read.DbNestedField)}"; + } return read.DbField; case "Value": var curtables = _tables;