c# - 如何在 where 条件下使用其他属性值更新 Azure 存储表一个特定属性值?
问题描述
让我们考虑一下我有下表存储表 NAMED Tbl_ResourceCost。
现在,我想通过使用分区键和 ResourceGuID 来更新扩展成本。因此,如果我在 WHERE 条件下将 xxx01 作为 PartitionKey 和 zzz01 作为 ResourceGuID 传递,那么它只会将我的 extendedCost (即 100 和 200 )更新为假设700。
如果我们考虑在 SQL 中更新它,那么查询将是“UPDATE Tbl_ResourceCost set ExtendedCost=700 where PartitionKey=xxx01 and ResourceGuID=zzz01”。它将在一次执行中将 100 和 200 更新为 700。
我正在 C# 中寻找类似的查询以在 Azure Storage Table 中更新。我将 NuGet 包用作:Microsoft.Azure.Cosmos.Table
解决方案
如果要更新 Azure 表存储实体的属性,我们需要提供分区键和行键。更多详情,请参阅此处。因此,根据您的需要,我们需要查询 Azure 表存储以获取这些您需要的实体,然后更新这些。
例如
using Microsoft.Azure.Cosmos.Table;
using System.Threading.Tasks;
using System;
namespace Storage
{
class Program
{
static async Task Main(string[] args)
{
string connectionString = "";
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
var table =tableClient.GetTableReference("test");
TableQuery<MyEntity> myQuery = new TableQuery<MyEntity>().Where(
TableQuery.CombineFilters(
TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, ""),
TableOperators.And,
TableQuery.GenerateFilterCondition("ResourceGuID", QueryComparisons.Equal,"")));
foreach (MyEntity entity in table.ExecuteQuery(myQuery))
{
entity.ExtendedCost = ;
TableOperation insertOrMergeOperation = TableOperation.InsertOrMerge(entity);
TableResult result = await table.ExecuteAsync(insertOrMergeOperation);
var s = result.Result as MyEntity;
Console.WriteLine(s.ExtendedCost )
}
}
}
public class MyEntity : TableEntity
{
public MyEntity()
{
}
public string ResourceGuID{ get; set; }
public Int32 ExtendedCost { get; set; }
}
}
推荐阅读
- sql - 如何为 liquibase 中的两列设置前置条件?
- c# - 执行另一个实体的插件后如何刷新表单
- bash - 如何使用 bash 将多个短参数连接到单个字符串?
- php - 无法在数据库中创建新条目
- vba - 如何使用类模块修改用户窗体标签的外观?
- javascript - 如何将一页上的 id 调用到另一页
- linux - 用于替换自定义目录中的一整行代码的 Ejecutable 脚本
- node.js - 如何将数据从 React 表单传递到 Node 代码?
- c++ - 为什么我得到“char 类型的参数与 FILE 类型的参数不兼容”?
- huawei-mobile-services - HMS Location Kit - 我们可以在本地反应中发送本地通知吗?