c# - 如何在天蓝色表存储的列中附加值?
问题描述
我目前在 table storage partitionkey = test, rowkey = bob, number= 911中有一个现有项目,
现在可以说我想测试一下这个人的列名下是否有一个值,如果有然后附加它另一个由 ; 分隔的数字
我试过 InsertOrMerge() 但它替换了值,我希望将值附加到未删除的列中。
编辑:继承人我试过的代码
string tableName = "test2";
var batch = new TableBatchOperation();
CloudStorageAccount storageAccount =
CreateStorageAccountFromConnectionString(storageConnectionString);
CloudTableClient tableClient = storageAccount.CreateCloudTableClient(new
TableClientConfiguration());
CloudTable table = tableClient.GetTableReference(tableName);
CustomerEntityTwo test = new CustomerEntityTwo("test", "bob")
{
number= "119"
};
batch.InsertOrMerge(test);
table.ExecuteBatch(batch);
我知道我做得不对,我不知道将 119 附加到现有数字值的正确方法,但我希望它是 911;119 在“数字”列下。
解决方案
InsertOrMerge
操作不像你想象的那样工作。如果实体不存在,它将创建一个实体,或者如果实体存在,则将属性与现有属性合并(添加新属性,更新现有属性值并且不触及缺失的属性)。
在您的场景中,您想要检查实体中是否存在属性。如果该属性存在,您希望获取该属性的现有值,将新值附加到该项目,然后再次保存该属性。
为此,首先您需要从存储中获取该实体,将该值与新值进行比较,更新该值,然后Merge
对该实体调用操作。
例如,请参见下面的示例代码:
var storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=account-name;AccountKey=acccount-key;EndpointSuffix=core.windows.net;");
var client = storageAccount.CreateCloudTableClient();
var table = client.GetTableReference("test");
var partitionKey = "test";
var rowKey = "bob";
var valueToCheck = "119";
var insertOrMergeEntity = true;
var op = TableOperation.Retrieve(partitionKey, rowKey);
var result = table.Execute(op);
var entity = result.Result as DynamicTableEntity;
if (entity == null)
{
entity = new DynamicTableEntity(partitionKey, rowKey);
}
if (entity.Properties.ContainsKey("number"))
{
var numberAttributeValue = entity.Properties["number"].StringValue;
if (numberAttributeValue.IndexOf(valueToCheck) < 0)
{
numberAttributeValue += "; " + valueToCheck;
entity.Properties["number"] = new EntityProperty(numberAttributeValue);
}
else
{
insertOrMergeEntity = false;
}
}
else
{
entity.Properties.Add("number", new EntityProperty(valueToCheck));
}
if (insertOrMergeEntity)
{
var mergeOperation = TableOperation.InsertOrMerge(entity);
table.Execute(mergeOperation);
}
推荐阅读
- c# - 显示用户服务器权限
- c++ - const 映射及其大小
- sql - 将 'DD-MM-YY' 转换为 'Month Year' oracle
- c# - ZStandard 压缩在 MongoDB v4.2.7 中不起作用
- azure - 重新播放/重复/重新触发现有文件的 Azure BlobStorage 函数触发器
- sql - 使用 SQLdeveloper 在 oracle 中插入多个 BLOB 文件
- android - Xampp 无法在 Android 浏览器中加载
- variables - Halcon - 初始化标志性变量的元组
- python - 从 2 个下拉菜单中抓取表格数据
- javascript - 如何在输入时添加 libphonenumber