From f117b1452ea36d984ea4476f2e6112ab4091bf06 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Sun, 10 Sep 2023 00:57:44 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20GroupBy=20+=20WithTemp?= =?UTF-8?q?Query=20+=20.Key.xx=20+=20=E7=89=B9=E6=80=A7=E5=90=8D=E4=B8=8E?= =?UTF-8?q?=E5=AE=9E=E4=BD=93=E4=B8=8D=E5=90=8C=20+=20=E4=B8=89=E5=85=83?= =?UTF-8?q?=E8=A1=A8=E8=BE=BE=E5=BC=8F=E8=A7=A3=E6=9E=90=E9=97=AE=E9=A2=98?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Examples/base_entity/Program.cs | 37 +++++++++++++++++++++---- FreeSql.DbContext/FreeSql.DbContext.xml | 9 ++++++ FreeSql/Internal/CommonExpression.cs | 14 ++++++++++ 3 files changed, 54 insertions(+), 6 deletions(-) diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index 26983509..496bfd37 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -600,12 +600,16 @@ namespace base_entity BaseEntity.Initialization(fsql, () => _asyncUow.Value); #endregion - fsql.GlobalFilter.Apply("test01", a => a.IsDeleted == false); - - var updatejoin031sql = fsql.Update() - .Join((a, b) => a.GroupId == b.Id) - .Set((a, b) => b.GroupName == a.Username + "b.groupname") - .ToSql(); + var list0x1sql = fsql.Select() +.InnerJoin((l, p) => l.ProductId == p.ID) +.GroupBy((l, p) => new { p.ID, l.ShopType }) +.WithTempQuery(a => new { + a.Key.ID, + Money2 = a.Key.ShopType, + Money = a.Key.ShopType == 1 ? a.Value.Item1.Price * a.Value.Item1.Amount : a.Value.Item1.Price * a.Value.Item1.Amount * 1.1m +}) +.ToSql(); + Console.WriteLine(list0x1sql); fsql.Delete().Where("1=1").ExecuteAffrows(); FreeSql.Internal.Utils.TypeHandlers.TryAdd(typeof(TestIdAndIdentity), new String_TestIdAndIdentity()); @@ -2631,3 +2635,24 @@ class String_TestIdAndIdentity : TypeHandler } } } +public partial class OrderLine22x +{ + + public string Id { get; set; } + public string OrderId { get; set; } + + public string ShopId { get; set; } + [JsonProperty, Column(Name = "Shop_Type")] + public int? ShopType { get; set; } + public string ProductId { get; set; } + public decimal Price { get; set; } + public decimal Amount { get; set; } +} +[JsonObject(MemberSerialization.OptIn), Table(Name = "T_Product22x", DisableSyncStructure = true)] + +public partial class Product22x +{ + public string ID { get; set; } + public string Name { get; set; } + public string Model { get; set; } +} diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 594fbad3..537315e2 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -733,6 +733,15 @@ + + + 根据Assembly扫描所有继承IEntityTypeConfiguration<T>的配置类 + + + + + + 创建普通数据上下文档对象 diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index f7c401e1..d597873d 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -89,6 +89,19 @@ namespace FreeSql.Internal field.Append(_common.FieldAsAlias(parent.DbNestedField)); } } + var isGroupAddField = true; + var isGroupAddFieldProvider = diymemexp as SelectGroupingProvider; + if (isGroupAddFieldProvider?._addFieldAlias == true) + { + switch (exp.NodeType) + { + case ExpressionType.Conditional: + case ExpressionType.Call: + isGroupAddField = false; + isGroupAddFieldProvider._addFieldAlias = false; + break; + } + } Func getTSC = () => new ExpTSC { _tables = _tables, _tableRule = _tableRule, diymemexp = diymemexp, tbtype = SelectTableInfoType.From, isQuoteName = true, isDisableDiyParse = false, style = ExpressionStyle.Where, whereGlobalFilter = whereGlobalFilter, dbParams = select?._params }; //#462 添加 DbParams 解决 switch (exp.NodeType) @@ -542,6 +555,7 @@ namespace FreeSql.Internal field.Append(", ").Append(parent.DbField); LocalSetFieldAlias(ref index, false); if (parent.CsType == null && exp.Type.IsValueType) parent.CsType = exp.Type; + if (isGroupAddField == false && isGroupAddFieldProvider != null) isGroupAddFieldProvider._addFieldAlias = true; return false; } public object ReadAnonymous(ReadAnonymousTypeInfo parent, DbDataReader dr, ref int index, bool notRead, ReadAnonymousDbValueRef dbValue, int rowIndex,