UpdateableProviderT3.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq.Expressions;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Linq;
  7. namespace SqlSugar
  8. {
  9. public class UpdateableProvider<T, T2, T3> : IUpdateable<T, T2, T3> where T : class, new()
  10. {
  11. internal IUpdateable<T> updateableObj;
  12. public int ExecuteCommand()
  13. {
  14. return this.updateableObj.ExecuteCommand();
  15. }
  16. public Task<int> ExecuteCommandAsync()
  17. {
  18. return this.updateableObj.ExecuteCommandAsync();
  19. }
  20. public IUpdateable<T, T2, T3, T4> InnerJoin<T4>(Expression<Func<T, T2, T3, T4, bool>> joinExpress)
  21. {
  22. updateableObj.UpdateBuilder.Context.InitMappingInfo<T4>();
  23. UpdateableProvider<T, T2, T3,T4> result = new UpdateableProvider<T, T2, T3,T4>();
  24. result.updateableObj = updateableObj;
  25. var joinIno = ((QueryableProvider<T>)updateableObj.UpdateBuilder.Context.Queryable<T>()).GetJoinInfo(joinExpress, JoinType.Inner);
  26. result.updateableObj.UpdateBuilder.JoinInfos.Add(joinIno);
  27. result.updateableObj.UpdateBuilder.ShortName = joinExpress.Parameters.FirstOrDefault()?.Name;
  28. return result;
  29. }
  30. public IUpdateable<T, T2, T3> SetColumns(Expression<Func<T, T2, T3, T>> columns)
  31. {
  32. var exp = ((columns as LambdaExpression).Body as MemberInitExpression).Bindings;
  33. var items = ExpressionTool.GetMemberBindingItemList(exp);
  34. var UpdateBuilder = updateableObj.UpdateBuilder;
  35. var SqlBuilder = UpdateBuilder.Builder;
  36. foreach (var item in items)
  37. {
  38. var dbColumnName = updateableObj.UpdateBuilder.Context.EntityMaintenance.GetDbColumnName<T>(item.Key);
  39. var value = updateableObj.UpdateBuilder.GetExpressionValue(ExpressionTool.RemoveConvert(item.Value), ResolveExpressType.WhereMultiple).GetString();
  40. this.updateableObj.UpdateBuilder.SetValues.Add(new KeyValuePair<string, string>(dbColumnName, value));
  41. }
  42. UpdateBuilder.DbColumnInfoList = UpdateBuilder.DbColumnInfoList
  43. .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();
  44. return this;
  45. }
  46. public IUpdateable<T, T2, T3> Where(Expression<Func<T, T2, T3, bool>> whereExpression)
  47. {
  48. var value = updateableObj.UpdateBuilder.GetExpressionValue(whereExpression, ResolveExpressType.WhereMultiple).GetString();
  49. updateableObj.UpdateBuilder.WhereValues.Add(value);
  50. return this;
  51. }
  52. }
  53. }