using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq.Expressions; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Linq; namespace SqlSugar { public class UpdateableProvider : IUpdateable where T : class,new() { public IUpdateable updateableObj { get; set; } public int ExecuteCommand() { return this.updateableObj.ExecuteCommand(); } public Task ExecuteCommandAsync() { return this.updateableObj.ExecuteCommandAsync(); } public IUpdateable InnerJoin(Expression> joinExpress) { updateableObj.UpdateBuilder.Context.InitMappingInfo(); 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) { var exp = ((columns as LambdaExpression).Body as MemberInitExpression).Bindings; var items=ExpressionTool.GetMemberBindingItemList(exp); var UpdateBuilder = updateableObj.UpdateBuilder; var SqlBuilder = UpdateBuilder.Builder; UpdateBuilder.LambdaExpressions.IsSingle = false; 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(); if (ExpressionTool.GetMethodName(ExpressionTool.RemoveConvert(item.Value))=="End") { value = UtilMethods.RemoveEqualOne(value); } 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) { var value = updateableObj.UpdateBuilder.GetExpressionValue(whereExpression, ResolveExpressType.WhereMultiple).GetString(); updateableObj.UpdateBuilder.WhereValues.Add(value); return this; } } }