aboutsummaryrefslogtreecommitdiff
path: root/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/UpdateClause.cs
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-12-06 11:14:32 +0800
committercrupest <crupest@outlook.com>2022-12-20 20:32:52 +0800
commit58d109a1cde88ee9614852ef301f2a8be359cc1c (patch)
treeb33df5481aa9ea36e9236976725e64d00e05327f /docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/UpdateClause.cs
parent3d55a8a37e0e56e56a0bdad4fbb7a69a5d36d54b (diff)
downloadcrupest-58d109a1cde88ee9614852ef301f2a8be359cc1c.tar.gz
crupest-58d109a1cde88ee9614852ef301f2a8be359cc1c.tar.bz2
crupest-58d109a1cde88ee9614852ef301f2a8be359cc1c.zip
Develop secret api. v11
Diffstat (limited to 'docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/UpdateClause.cs')
-rw-r--r--docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/UpdateClause.cs70
1 files changed, 70 insertions, 0 deletions
diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/UpdateClause.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/UpdateClause.cs
new file mode 100644
index 0000000..84267a3
--- /dev/null
+++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/UpdateClause.cs
@@ -0,0 +1,70 @@
+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<string, object?> pair)
+ {
+ ColumnName = pair.Key;
+ Value = pair.Value;
+ }
+
+ public string ColumnName { get; set; }
+ public object? Value { get; set; }
+
+ public static implicit operator KeyValuePair<string, object?>(UpdateItem item)
+ {
+ return new(item.ColumnName, item.Value);
+ }
+
+ public static implicit operator UpdateItem(KeyValuePair<string, object?> pair)
+ {
+ return new(pair);
+ }
+}
+
+public class UpdateClause
+{
+ public List<UpdateItem> Items { get; } = new List<UpdateItem>();
+
+ public UpdateClause(IEnumerable<UpdateItem> items)
+ {
+ Items.AddRange(items);
+ }
+
+ public UpdateClause(params UpdateItem[] items)
+ {
+ Items.AddRange(items);
+ }
+
+ public List<string> 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();
+ }
+}