using System.Text; using Dapper; namespace CrupestApi.Commons.Crud; public class UpdateItem { public UpdateItem(string columnName, object? value) { ColumnName = columnName; Value = value; } public UpdateItem(KeyValuePair pair) { ColumnName = pair.Key; Value = pair.Value; } public string ColumnName { get; set; } public object? Value { get; set; } public static implicit operator KeyValuePair(UpdateItem item) { return new(item.ColumnName, item.Value); } public static implicit operator UpdateItem(KeyValuePair pair) { return new(pair); } } public class UpdateClause { public List Items { get; } = new List(); public UpdateClause(IEnumerable items) { Items.AddRange(items); } public UpdateClause(params UpdateItem[] items) { Items.AddRange(items); } public List GetRelatedColumns() { return Items.Select(i => i.ColumnName).ToList(); } public string GenerateSql(DynamicParameters parameters) { StringBuilder result = new StringBuilder(); foreach (var item in Items) { if (result.Length > 0) { result.Append(", "); } var parameterName = parameters.AddRandomNameParameter(item.Value); result.Append($"{item.ColumnName} = @{parameterName}"); } return result.ToString(); } }