2017-01-13 13 views
0

.NET用のAWS SDKのDynamoDBv2ライブラリを使用して、更新リクエストによって空のリストにDynamoDBドキュメントの属性を設定しようとしています。DynamoDB属性を空のリストに設定するにはどうすればよいですか?

ノー成功を収めて、明白な更新式を試してみた:

// Fails, expression attribute values cannot contain an empty list 
... 
ExpressionAttributeValues = new Dictionary<string, AttributeValue> { 
    { ":empty", new AttributeValue { L = new List<AttributeValue> { } } }, 
}, 
UpdateExpression = "SET #P.MyList = :empty", 
... 

は、どのように私はこれを達成することができますか?

答えて

2

私はAWS SDKのソースコードを掘り下げて答えを見つけました。キーは、IsLSetプロパティが設定可能であることです。 - この方法new AttributeValue { L = new List<AttributeValue> { } }を使用すると、意図した効果を持っていない理由

public static bool GetIsSet<T>(List<T> field) 
{ 
    if (field == null) 
     return false; 

    if (field.Count > 0) 
     return true; 

    var sl = field as AlwaysSendList<T>; 
    if (sl != null) 
     return true; 

    return false; 
} 

これも示しています。次のコードを使用している、

public static void SetIsSet<T>(bool isSet, ref List<T> field) 
{ 
    if (isSet) 
     field = new AlwaysSendList<T>(field); 
    else 
     field = new List<T>(); 
} 

あなたのAttributeValueのが初期化されるかどうかを判断する。これは、次のコードを呼び出しますCountが0であるためfalseを返します。ただし、IsLSetプロパティを設定すると、AlwaysSendListタイプのチェックはtrueを返します。

戻るあなたのコードに、答えは次のように使用することです:

... 
ExpressionAttributeValues = new Dictionary<string, AttributeValue> { 
    { ":empty", new AttributeValue { IsLSet = true } }, 
}, 
UpdateExpression = "SET #P.MyList = :empty", 
... 
関連する問題