2016-12-14 3 views
-1

私はC#を使用してDynamodbドキュメントモデルを使用しています。ここで、以下れる構造:dynamodb updateitemrequest C#

表:コンタクト フィールド: ID フルネーム アドレス:[{通り、州、市、郵便番号}、{通り、州、市}]

I新しいアドレスをアドレスに追加したい、またはリストに追加すると言うことができます(アドレス)

私は次のコードを試していますが、動作しません。私はいつもあなたがこのコードまたは同様のことを行うための新たな方法の修正を提案してくださいすることができ不正な要求

Document address = new Document(); 
address["Id"] = "1"; 
address["Street"] = "XYZ"; 
address["state"] = "AAAA"; 
address["City"] = "QQQ"; 
address["Zip"] = "34556"; 

UpdateItemRequest updateRequest = new UpdateItemRequest 
{ 
    TableName = "Contacts" 
    Key = new Dictionary<string, AttributeValue> 
    { 
     {"Id", new AttributeValue{S = "1"}} 
    }, 
    UpdateExpression = "SET #addresses = list_append(#addresses, :address)", 
    ExpressionAttributeNames = new Dictionary<string, string> 
     { 
      {"#addresses", "addresses"} 
     }, 
    ExpressionAttributeValues = new Dictionary<string, AttributeValue> 
     { 
      { ":address", new AttributeValue{S = address.ToString()}}, 

     } 

}; 

dbClient.UpdateItem(updateRequest); 

を取得しています。この関数はそれに追加された新しい要素とリスト に評価 -

答えて

0

1)operandリスト

list_append(オペランド、オペランド)であるべきです。新しい要素は リストに含まれていなければなりません。たとえば、2をリストに追加する場合、オペランドは[2]になります。 は、新しい要素をリストの先頭または末尾に、 によってオペランドの順序を逆にすることで追加できます。

2)は、このクラスにDynamoDBList

リストを使用する必要があります - DynamoDBListコンストラクタを使用します。

3)例: -

var addressList = new DynamoDBList(); 
addressList.Add(address); 

4)式を変更し、値属性: - Lのため

ExpressionAttributeValues = new Dictionary<string, AttributeValue> 
     { 
      { ":address", new AttributeValue{L = addressList}}, 

     } 
+0

を=私はエラーを取得するアドレスリストは、暗黙的に型DynamoDBListをリストに変換することはできません