From f3f8a5ad4f39e6eaf44ba828320e5eda138078ea Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Mon, 24 Apr 2023 16:34:56 +0800 Subject: [PATCH] join update --- .../QueryableProvider/QueryableHelper.cs | 2 +- .../UpdateProvider/UpdateableProvider.cs | 2 +- .../UpdateProvider/UpdateableProviderT2.cs | 11 ++++-- .../UpdateProvider/UpdateableProviderT3.cs | 36 +++++++++++++++---- .../UpdateProvider/UpdateableProviderT4.cs | 28 +++++++++++---- 5 files changed, 61 insertions(+), 18 deletions(-) diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs index c2b3e3170..e46596ed4 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs @@ -1076,7 +1076,7 @@ namespace SqlSugar return sql; } - protected JoinQueryInfo GetJoinInfo(Expression joinExpression, JoinType joinType) + internal JoinQueryInfo GetJoinInfo(Expression joinExpression, JoinType joinType) { QueryBuilder.CheckExpressionNew(joinExpression, "Join"); QueryBuilder.JoinExpression = joinExpression; diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs index b7c45666f..dc482ade9 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs @@ -165,7 +165,7 @@ namespace SqlSugar #region Common public IUpdateable InnerJoin(Expression> joinExpress) { - Updateable result = new Updateable(); + UpdateableProvider result = new UpdateableProvider(); result.updateableObj = this; var querybale=this.Context.Queryable().LeftJoin(joinExpress); result.updateableObj.UpdateBuilder.JoinInfos = querybale.QueryBuilder.JoinQueryInfos; diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/UpdateProvider/UpdateableProviderT2.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/UpdateProvider/UpdateableProviderT2.cs index 91a1d5b9a..bf02072c6 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/UpdateProvider/UpdateableProviderT2.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/UpdateProvider/UpdateableProviderT2.cs @@ -9,9 +9,9 @@ using System.Threading.Tasks; using System.Linq; namespace SqlSugar { - public class Updateable : IUpdateable where T : class,new() + public class UpdateableProvider : IUpdateable where T : class,new() { - public IUpdateable updateableObj { get; set; } + public IUpdateable updateableObj { get; set; } public int ExecuteCommand() { return this.updateableObj.ExecuteCommand(); @@ -24,7 +24,12 @@ namespace SqlSugar public IUpdateable InnerJoin(Expression> joinExpress) { - throw new NotImplementedException(); + UpdateableProvider result = new UpdateableProvider(); + result.updateableObj = updateableObj; + var joinIno = ((QueryableProvider)updateableObj.UpdateBuilder.Context.Queryable()).GetJoinInfo(joinExpress, JoinType.Inner); + result.updateableObj.UpdateBuilder.JoinInfos.Add(joinIno); + result.updateableObj.UpdateBuilder.ShortName = joinExpress.Parameters.FirstOrDefault()?.Name; + return result; } public IUpdateable SetColumns(Expression> columns) diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/UpdateProvider/UpdateableProviderT3.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/UpdateProvider/UpdateableProviderT3.cs index 3715455f4..3f09505d3 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/UpdateProvider/UpdateableProviderT3.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/UpdateProvider/UpdateableProviderT3.cs @@ -3,34 +3,56 @@ using System.Collections.Generic; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; - +using System.Linq; namespace SqlSugar { - public class Updateable : IUpdateable where T : class, new() + public class UpdateableProvider : IUpdateable where T : class, new() { + internal IUpdateable updateableObj; + public int ExecuteCommand() { - throw new NotImplementedException(); + return this.updateableObj.ExecuteCommand(); } public Task ExecuteCommandAsync() { - throw new NotImplementedException(); + return this.updateableObj.ExecuteCommandAsync(); } public IUpdateable InnerJoin(Expression> joinExpress) { - throw new NotImplementedException(); + UpdateableProvider result = new UpdateableProvider(); + result.updateableObj = updateableObj; + var joinIno = ((QueryableProvider)updateableObj.UpdateBuilder.Context.Queryable()).GetJoinInfo(joinExpress, JoinType.Inner); + result.updateableObj.UpdateBuilder.JoinInfos.Add(joinIno); + result.updateableObj.UpdateBuilder.ShortName = joinExpress.Parameters.FirstOrDefault()?.Name; + return result; } public IUpdateable SetColumns(Expression> columns) { - throw new NotImplementedException(); + var exp = ((columns as LambdaExpression).Body as MemberInitExpression).Bindings; + var items = ExpressionTool.GetMemberBindingItemList(exp); + var UpdateBuilder = updateableObj.UpdateBuilder; + var SqlBuilder = UpdateBuilder.Builder; + foreach (var item in items) + { + var dbColumnName = updateableObj.UpdateBuilder.Context.EntityMaintenance.GetDbColumnName(item.Key); + var value = updateableObj.UpdateBuilder.GetExpressionValue(ExpressionTool.RemoveConvert(item.Value), ResolveExpressType.WhereMultiple).GetString(); + this.updateableObj.UpdateBuilder.SetValues.Add(new KeyValuePair(dbColumnName, value)); + } + UpdateBuilder.DbColumnInfoList = UpdateBuilder.DbColumnInfoList + .Where(it => it.UpdateServerTime == true || it.UpdateSql.HasValue() || UpdateBuilder.SetValues.Any(v => SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.DbColumnName, StringComparison.CurrentCultureIgnoreCase) || SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase)) || it.IsPrimarykey == true).ToList(); + return this; } public IUpdateable Where(Expression> whereExpression) { - throw new NotImplementedException(); + + var value = updateableObj.UpdateBuilder.GetExpressionValue(whereExpression, ResolveExpressType.WhereMultiple).GetString(); + updateableObj.UpdateBuilder.WhereValues.Add(value); + return this; } } } diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/UpdateProvider/UpdateableProviderT4.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/UpdateProvider/UpdateableProviderT4.cs index 56a720da5..c75dc6f84 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/UpdateProvider/UpdateableProviderT4.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/UpdateProvider/UpdateableProviderT4.cs @@ -3,29 +3,45 @@ using System.Collections.Generic; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; - +using System.Linq; namespace SqlSugar { - public class Updateable : IUpdateable where T : class, new() + public class UpdateableProvider : IUpdateable where T : class, new() { + public IUpdateable updateableObj { get; set; } public int ExecuteCommand() { - throw new NotImplementedException(); + return this.updateableObj.ExecuteCommand(); } public Task ExecuteCommandAsync() { - throw new NotImplementedException(); + return this.updateableObj.ExecuteCommandAsync(); } public IUpdateable SetColumns(Expression> columns) { - throw new NotImplementedException(); + var exp = ((columns as LambdaExpression).Body as MemberInitExpression).Bindings; + var items = ExpressionTool.GetMemberBindingItemList(exp); + var UpdateBuilder = updateableObj.UpdateBuilder; + var SqlBuilder = UpdateBuilder.Builder; + foreach (var item in items) + { + var dbColumnName = updateableObj.UpdateBuilder.Context.EntityMaintenance.GetDbColumnName(item.Key); + var value = updateableObj.UpdateBuilder.GetExpressionValue(ExpressionTool.RemoveConvert(item.Value), ResolveExpressType.WhereMultiple).GetString(); + this.updateableObj.UpdateBuilder.SetValues.Add(new KeyValuePair(dbColumnName, value)); + } + UpdateBuilder.DbColumnInfoList = UpdateBuilder.DbColumnInfoList + .Where(it => it.UpdateServerTime == true || it.UpdateSql.HasValue() || UpdateBuilder.SetValues.Any(v => SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.DbColumnName, StringComparison.CurrentCultureIgnoreCase) || SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase)) || it.IsPrimarykey == true).ToList(); + return this; } public IUpdateable Where(Expression> whereExpression) { - throw new NotImplementedException(); + + var value = updateableObj.UpdateBuilder.GetExpressionValue(whereExpression, ResolveExpressType.WhereMultiple).GetString(); + updateableObj.UpdateBuilder.WhereValues.Add(value); + return this; } } }