1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
| using System.Linq.Expressions; using System.Net; using System.Reflection; using SqlSugar;
UpdateHelper .GetSetProperties<YourEntity>(it=> new YourEntity { Id = 0, Name = "NewName" });
static class UpdateHelper { public static List<string> DynamicSetColumns<T>( Expression<Func<T, T>> columns) where T : class, new() { var properties = ExpressionTool.GetNewExpressionItemList(columns) .Select(kvp => kvp.Key) .ToList();
return properties; } public static IEnumerable<string> GetSetProperties<T>(Expression<Func<T, T>> expression) { var memberInit = expression.Body as MemberInitExpression; if (memberInit == null) { throw new ArgumentException("Expression must be a MemberInitExpression (e.g., new T { ... })"); } var properties = new List<string>(); foreach (var binding in memberInit.Bindings) { if (binding is MemberAssignment assignment) { properties.Add(assignment.Member.Name); } } return properties; }
} public static class ExpressionHelper { public static List<string> GetSetProperties<T>(Expression<Func<T, T>> expression) { var memberInit = expression.Body as MemberInitExpression; if (memberInit == null) { throw new ArgumentException("Expression must be a MemberInitExpression (e.g., new T { ... })"); }
var properties = new List<string>(); foreach (var binding in memberInit.Bindings) { switch (binding) { case MemberAssignment assignment: properties.Add(assignment.Member.Name); break; case MemberListBinding listBinding: properties.Add(listBinding.Member.Name); break; case MemberMemberBinding memberBinding: properties.Add(memberBinding.Member.Name); properties.AddRange(GetNestedProperties(memberBinding.Bindings)); break; } } return properties; }
private static IEnumerable<string> GetNestedProperties(IEnumerable<MemberBinding> bindings) { foreach (var binding in bindings) { if (binding is MemberAssignment assignment) { yield return assignment.Member.Name; } } } }
internal class YourEntity { public int Id { get; set; } public string Name { get; set; } public string Description { get; set; } public DateTime CreatedTime { get; set; } public DateTime ModifiedTime { get; set; } public bool IsDeleted { get; set; } public int Version { get; set; } }
|