UpdateableProviderT2.cs 3.1 KB

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