我有一个Azure表,有些像这样的枚举
pk rk en fr de ...
foo 1 'E-f1' 'F-f1' 'D-f1' ...
foo 2 'E-f2' 'F-f2' 'D-f2' ...
bar 1 'E-b1' 'F-b1' 'D-b1' ...
bar 2 'E-b2' 'F-b2' 'D-b2' ...
bar 3 'E-b3' 'F-b3' 'D-b3' ...
en
,fr
,de
等...是语言代码,分别是表格中的列名称。
当用户选择语言时,我需要为“foo”和“bar”选择下拉菜单 我需要显示下拉列表。
我创建了一个DescriptionEntity
,其Description
应保留'en'或'fr'或'de'文本值,具体取决于当前的用户界面语言。
以下代码是否将Description
属性替换为Azure表中的当前语言值并分别读取它,或者我误解了某些内容(因为文档中的内容不是很清楚)......?
public class DescriptionEntity : TableEntity
{
public string Description { get; set; }
private string lang;
public DescriptionEntity(string lang) {
this.lang = lang;
}
public override void ReadEntity(IDictionary<string, EntityProperty> properties, OperationContext operationContext) {
base.ReadEntity(properties, operationContext);
if (properties.ContainsKey(this.lang)) {
this.Description = properties[this.lang].StringValue;
}
}
public override IDictionary<string, EntityProperty> WriteEntity(OperationContext operationContext)
{
var x = base.WriteEntity(operationContext);
var descriptionValue = this.Description;
if (x.ContainsKey(lang)) {
x[lang].StringValue = this.Description;
}
else {
x.Add(lang, new EntityProperty(this.Description));
}
x.Remove("Description");
return x;
}
}
答案 0 :(得分:1)
我创建了一个DescriptionEntity,它有一个描述,应该保留&#39; en&#39;或者&#39; fr&#39;或者&#39; de&#39;文本值,具体取决于当前的用户界面语言。
以下代码是否使用Azure表中的当前语言值替换Description属性并分别读取它,或者我误解了某些内容(因为文档中的内容不是很清楚)......?
根据我对以下示例的测试,您的代码应使用基于当前用户界面语言的语言值替换Description
属性。
Azure表中的实体:
DescriptionEntity class:
public class DescriptionEntity : TableEntity
{
public DescriptionEntity(string pk, string rk)
{
this.PartitionKey = pk;
this.RowKey = rk;
}
public DescriptionEntity() { }
public string Description { get; set; }
string lang = "en";
public override void ReadEntity(IDictionary<string, EntityProperty> properties, OperationContext operationContext)
{
base.ReadEntity(properties, operationContext);
if (properties.ContainsKey(lang))
{
this.Description = properties[lang].StringValue;
}
}
}
查询实体:
TableQuery<DescriptionEntity> query = new TableQuery<DescriptionEntity>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "foo"));
foreach (DescriptionEntity entity in table.ExecuteQuery(query))
{
string languages = entity.Description;
}