我目前在表存储中有一个现有项目
分区键=测试,行键=鲍勃,数字= 911
现在说我要测试以查看列名下是否有值对于此人,如果有,则在其后附加另一个数字,以;
我尝试了InsertOrMerge(),但是它替换了值,我希望将值附加到不删除的列中。
编辑:这是我尝试的代码
Word(token.stem())
我知道我做得不好,我不知道将119附加到现有数字值的确切方法,但是我希望它在“数字”列下为911; 119。
答案 0 :(得分:1)
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);
}