我正在使用 C# 与 azure 表通信。我很好奇是否有办法只获取一个值而不是返回整个实体?
假设我只想获取行的时间戳。有没有办法只检索与键匹配的时间戳,还是必须使用整个实体?
下面是我的意思的一个例子:
我可以做这样的事情吗:
DateTime time = table.Retrieve(partitionKey, rowKey, Timestamp);
还是我必须这样做:
MyClass object = table.Retrieve(partitionKey, rowKey).Result as MyClass;
Console.WriteLine(object.TimeStamp);
我试图避免编写不同的类或为每个可能输入到我的表中的实体添加新属性。
我认为您正在寻找DynamicTableEntity
.您可以将Execute
调用的结果强制转换为DynamicTableEntity
并访问默认属性,如Timestamp
、RowKey
等。该类型还包含Properties
的定义,(字符串=列名(->(值=表实体属性(的Dictionary
,封装任何自定义数据。
就检索存储中的属性子集而言,可以将第三个参数传递给TableOperation.Retrieve
该参数指定执行调用时要检索的自定义属性子集。
//table is a CloudTable object
List<string> propertiesToRetrieve = new List<string>() { "MyIntProperty"}
TableOperation op = TableOperation.Retrieve("partitionkey", "rowkey", propertiesToRetrieve);
TableResult result = table.Execute(op);
DynamicTableEntity myEntity = (DynamicTableEntity)result.Result;
DateTime ts = myEntity.Timestamp;
int? customIntProperty = myEntity.Properties["MyIntProperty"].Int32Value;