

La AWS SDK pour .NET V3 est passée en mode maintenance.

Nous vous recommandons de migrer vers la version [AWS SDK pour .NET V4](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html). Pour plus de détails et d'informations sur la façon de migrer, veuillez consulter notre [annonce relative au mode de maintenance](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/).

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Utilisation d'expressions avec Amazon DynamoDB et le AWS SDK pour .NET
<a name="dynamodb-expressions"></a>

**Note**  
Les informations contenues dans cette rubrique sont spécifiques aux projets basés sur .NET Framework et les AWS SDK pour .NET versions 3.3 et antérieures.

Les exemples de code suivants montrent comment utiliser DynamoDB AWS SDK pour .NET pour programmer DynamoDB avec des expressions. *Les expressions* indiquent les attributs que vous souhaitez lire à partir d'un élément d'une table DynamoDB. Vous utilisez également des expressions lors de l'écriture d'un élément, pour signaler toutes les conditions qui doivent être satisfaites (aussi appelées *mise à jour conditionnelle*) et pour indiquer comment les attributs doivent être mis à jour. Des exemples de mise à jour remplacent l'attribut par une nouvelle valeur, ou ajoutent de nouvelles données à une liste ou une carte. Pour plus d'informations, consultez [Lecture et écriture d'éléments à l'aide d'expressions](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.html).

**Topics**
+ [Exemples de données](#dynamodb-expressions-sample-data)
+ [Obtention d'un élément unique à l'aide de sa clé primaire et d'expressions](#dynamodb-expressions-get-item)
+ [Obtention de plusieurs éléments à l'aide de la clé primaire de la table et d'expressions](#dynamodb-expressions-query)
+ [Obtenir plusieurs éléments par l'intermédiaire d'expressions et d'autres attributs d'élément](#dynamodb-expressions-scan)
+ [Imprimer un élément](#dynamodb-expressions-print-item)
+ [Créer ou remplacer un élément à l'aide d'expressions](#dynamodb-expressions-put-item)
+ [Mettre à jour un élément à l'aide d'expressions](#dynamodb-expressions-update-item)
+ [Supprimer un élément à l'aide d'expressions](#dynamodb-expressions-delete-item)
+ [Plus d'informations](#dynamodb-expressions-resources)

## Exemples de données
<a name="dynamodb-expressions-sample-data"></a>

Les exemples de code présentés dans cette rubrique s'appuient sur les deux exemples d'éléments suivants d'une table DynamoDB nommée. `ProductCatalog` Ces éléments décrivent des informations sur les entrées de produit dans un catalogue de magasin de cycles fictif. Ces éléments sont basés sur l'exemple fourni dans [Case Study : A ProductCatalog Item](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.CaseStudy.html). Les descripteurs de types de données tels que `BOOL`, `L`, `M`, `N`, `NS`, `S` et `SS` correspondent à ceux de [Format de données JSON](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataFormat.html).

```
{
  "Id": {
    "N": "205"
  },
  "Title": {
    "S": "20-Bicycle 205"
  },
  "Description": {
    "S": "205 description"
  },
  "BicycleType": {
    "S": "Hybrid"
  },
  "Brand": {
    "S": "Brand-Company C"
  },
  "Price": {
    "N": "500"
  },
  "Gender": {
    "S": "B"
  },
  "Color": {
    "SS": [
      "Red",
      "Black"
    ]
  },
  "ProductCategory": {
    "S": "Bike"
  },
  "InStock": {
    "BOOL": true
  },
  "QuantityOnHand": {
    "N": "1"
  },
  "RelatedItems": {
    "NS": [
      "341",
      "472",
      "649"
    ]
  },
  "Pictures": {
    "L": [
      {
        "M": {
          "FrontView": {
            "S": "http://example/products/205_front.jpg"
          }
        }
      },
      {
        "M": {
          "RearView": {
            "S": "http://example/products/205_rear.jpg"
          }
        }
      },
      {
        "M": {
          "SideView": {
            "S": "http://example/products/205_left_side.jpg"
          }
        }
      }
    ]
  },
  "ProductReviews": {
    "M": {
      "FiveStar": {
        "SS": [
          "Excellent! Can't recommend it highly enough! Buy it!",
          "Do yourself a favor and buy this."
        ]
      },
      "OneStar": {
        "SS": [
          "Terrible product! Do not buy this."
        ]
      }
    }
  }
},
{
  "Id": {
    "N": "301"
  },
  "Title": {
    "S": "18-Bicycle 301"
  },
  "Description": {
    "S": "301 description"
  },
  "BicycleType": {
    "S": "Road"
  },
  "Brand": {
    "S": "Brand-Company C"
  },
  "Price": {
    "N": "185"
  },
  "Gender": {
    "S": "F"
  },
  "Color": {
    "SS": [
      "Blue",
      "Silver"
    ]
  },
  "ProductCategory": {
    "S": "Bike"
  },
  "InStock": {
    "BOOL": true
  },
  "QuantityOnHand": {
    "N": "3"
  },
  "RelatedItems": {
    "NS": [
      "801",
      "822",
      "979"
    ]
  },
  "Pictures": {
    "L": [
      {
        "M": {
          "FrontView": {
            "S": "http://example/products/301_front.jpg"
          }
        }
      },
      {
        "M": {
          "RearView": {
            "S": "http://example/products/301_rear.jpg"
          }
        }
      },
      {
        "M": {
          "SideView": {
            "S": "http://example/products/301_left_side.jpg"
          }
        }
      }
    ]
  },
  "ProductReviews": {
    "M": {
      "FiveStar": {
        "SS": [
          "My daughter really enjoyed this bike!"
        ]
      },
      "ThreeStar": {
        "SS": [
          "This bike was okay, but I would have preferred it in my color.",
	      "Fun to ride."
        ]
      }
    }
  }
}
```

## Obtention d'un élément unique à l'aide de sa clé primaire et d'expressions
<a name="dynamodb-expressions-get-item"></a>

L'exemple suivant présente la méthode `Amazon.DynamoDBv2.AmazonDynamoDBClient.GetItem` et un jeu d'expressions pour obtenir, puis imprimer, l'élément pour lequel `Id` est égal à `205`. Seuls les attributs suivants de l'élément sont renvoyés : `Id`, `Title`, `Description`, `Color`, `RelatedItems`, `Pictures` et `ProductReviews`.

```
// using Amazon.DynamoDBv2;
// using Amazon.DynamoDBv2.Model;

var client = new AmazonDynamoDBClient();
var request = new GetItemRequest
{
  TableName = "ProductCatalog",
  ProjectionExpression = "Id, Title, Description, Color, #ri, Pictures, #pr",
  ExpressionAttributeNames = new Dictionary<string, string>
  {
    { "#pr", "ProductReviews" },
    { "#ri", "RelatedItems" }
  },
  Key = new Dictionary<string, AttributeValue>
  {
    { "Id", new AttributeValue { N = "205" } }
  },
};
var response = client.GetItem(request);

// PrintItem() is a custom function.
PrintItem(response.Item);
```

Dans l'exemple précédent, la propriété `ProjectionExpression` spécifie l'attribut à renvoyer. La propriété `ExpressionAttributeNames` spécifie l'espace réservé `#pr` pour représenter l'attribut `ProductReviews` et l'espace réservé `#ri` pour représenter l'attribut `RelatedItems`. L'appel à `PrintItem` fait référence à une fonction personnalisée, comme décrit dans [Imprimer un élément](#dynamodb-expressions-print-item).

## Obtention de plusieurs éléments à l'aide de la clé primaire de la table et d'expressions
<a name="dynamodb-expressions-query"></a>

Les exemples suivants présentent la méthode `Amazon.DynamoDBv2.AmazonDynamoDBClient.Query` et un jeu d'expressions pour obtenir, puis imprimer, l'élément pour lequel `Id` est égal à `301`, mais uniquement si la valeur de `Price` est supérieure à `150`. Seuls les attributs suivants de l'élément sont renvoyés : `Id`, `Title` et l'ensemble des attributs `ThreeStar` dans `ProductReviews`.

```
// using Amazon.DynamoDBv2;
// using Amazon.DynamoDBv2.Model;

var client = new AmazonDynamoDBClient();
var request = new QueryRequest
{
  TableName = "ProductCatalog",
  KeyConditions = new Dictionary<string,Condition>
  {
    { "Id", new Condition()
      {
        ComparisonOperator = ComparisonOperator.EQ,
        AttributeValueList = new List<AttributeValue>
        {
          new AttributeValue { N = "301" }
        }
      }
    }
  },
  ProjectionExpression = "Id, Title, #pr.ThreeStar",
  ExpressionAttributeNames = new Dictionary<string, string>
  {
    { "#pr", "ProductReviews" },
    { "#p", "Price" }
  },
  ExpressionAttributeValues = new Dictionary<string,AttributeValue>
  {
    { ":val", new AttributeValue { N = "150" } }
  },
  FilterExpression = "#p > :val"
};
var response = client.Query(request);

foreach (var item in response.Items)
{
  // Write out the first page of an item's attribute keys and values.
  // PrintItem() is a custom function.
  PrintItem(item);
  Console.WriteLine("=====");
}
```

Dans l'exemple précédent, la propriété `ProjectionExpression` spécifie l'attribut à renvoyer. La propriété `ExpressionAttributeNames` spécifie l'espace réservé `#pr` pour représenter l'attribut `ProductReviews` et l'espace réservé `#p` pour représenter l'attribut `Price`. `#pr.ThreeStar` spécifie de retourner uniquement l'attribut `ThreeStar`. La propriété `ExpressionAttributeValues` spécifie l'espace réservé `:val` pour représenter la valeur `150`. La propriété `FilterExpression` spécifie que `#p` (`Price`) doit être supérieur à `:val` (`150`). L'appel à `PrintItem` fait référence à une fonction personnalisée, comme décrit dans [Imprimer un élément](#dynamodb-expressions-print-item).

## Obtenir plusieurs éléments par l'intermédiaire d'expressions et d'autres attributs d'élément
<a name="dynamodb-expressions-scan"></a>

L'exemple suivant présente la méthode `Amazon.DynamoDBv2.AmazonDynamoDBClient.Scan` et un jeu d'expressions pour obtenir, puis imprimer, l'ensemble des éléments pour lesquels `ProductCategory` est égal à `Bike`. Seuls les attributs suivants de l'élément sont renvoyés : `Id`, `Title` et l'ensemble des attributs dans `ProductReviews`.

```
// using Amazon.DynamoDBv2;
// using Amazon.DynamoDBv2.Model;

var client = new AmazonDynamoDBClient();
var request = new ScanRequest
{
  TableName = "ProductCatalog",
  ProjectionExpression = "Id, Title, #pr",
  ExpressionAttributeValues = new Dictionary<string,AttributeValue>
  {
    { ":catg", new AttributeValue { S = "Bike" } }
  },
  ExpressionAttributeNames = new Dictionary<string, string>
  {
    { "#pr", "ProductReviews" },
    { "#pc", "ProductCategory" }
  },
  FilterExpression = "#pc = :catg",  
};
var response = client.Scan(request);

foreach (var item in response.Items)
{
  // Write out the first page/scan of an item's attribute keys and values.
  // PrintItem() is a custom function.
  PrintItem(item);
  Console.WriteLine("=====");
}
```

Dans l'exemple précédent, la propriété `ProjectionExpression` spécifie l'attribut à renvoyer. La propriété `ExpressionAttributeNames` spécifie l'espace réservé `#pr` pour représenter l'attribut `ProductReviews` et l'espace réservé `#pc` pour représenter l'attribut `ProductCategory`. La propriété `ExpressionAttributeValues` spécifie l'espace réservé `:catg` pour représenter la valeur `Bike`. La propriété `FilterExpression` spécifie que `#pc` (`ProductCategory`) doit être égal à `:catg` (`Bike`). L'appel à `PrintItem` fait référence à une fonction personnalisée, comme décrit dans [Imprimer un élément](#dynamodb-expressions-print-item).

## Imprimer un élément
<a name="dynamodb-expressions-print-item"></a>

L'exemple suivant présente comment imprimer les attributs et les valeurs d'un élément. Cet exemple est utilisé dans les exemples précédents qui montrent comment [Obtention d'un élément unique à l'aide de sa clé primaire et d'expressions](#dynamodb-expressions-get-item), [Obtention de plusieurs éléments à l'aide de la clé primaire de la table et d'expressions](#dynamodb-expressions-query) et [Obtention de plusieurs éléments à l'aide d'expressions et d'autres attributs d'élément](#dynamodb-expressions-scan).

```
// using Amazon.DynamoDBv2.Model;

// Writes out an item's attribute keys and values.
public static void PrintItem(Dictionary<string, AttributeValue> attrs)
{
  foreach (KeyValuePair<string, AttributeValue> kvp in attrs)
  {
    Console.Write(kvp.Key + " = ");
    PrintValue(kvp.Value);
  }
}

// Writes out just an attribute's value.
public static void PrintValue(AttributeValue value)
{
  // Binary attribute value.
  if (value.B != null)
  {
    Console.Write("Binary data");
  }
  // Binary set attribute value.
  else if (value.BS.Count > 0)
  {
    foreach (var bValue in value.BS)
    {
      Console.Write("\n  Binary data");
    }
  }
  // List attribute value.
  else if (value.L.Count > 0)
  {
    foreach (AttributeValue attr in value.L)
    {
      PrintValue(attr);
    }
  }
  // Map attribute value.
  else if (value.M.Count > 0)
  {
    Console.Write("\n");
    PrintItem(value.M);
  }
  // Number attribute value.
  else if (value.N != null)
  {
    Console.Write(value.N);
  }
  // Number set attribute value.
  else if (value.NS.Count > 0)
  {
    Console.Write("{0}", string.Join("\n", value.NS.ToArray()));
  }
  // Null attribute value.
  else if (value.NULL)
  {
    Console.Write("Null");
  }
  // String attribute value.
  else if (value.S != null)
  {
    Console.Write(value.S);
  }
  // String set attribute value.
  else if (value.SS.Count > 0)
  {
    Console.Write("{0}", string.Join("\n", value.SS.ToArray()));
  }
  // Otherwise, boolean value.
  else
  {
    Console.Write(value.BOOL);
  }
 
  Console.Write("\n");
}
```

Dans l'exemple précédent, chaque valeur d'attribut possède plusieurs data-type-specific propriétés qui peuvent être évaluées afin de déterminer le format correct pour imprimer l'attribut. Ces propriétés incluent `B`, `BOOL`, `BS`, `L`, `M`, `N`, `NS`, `NULL`, `S` et `SS`, qui correspondent à celles du [Format de données JSON](DataFormat.html). Pour des propriétés telles que `B`, `N`, `NULL` et `S`, si la propriété correspondante n'est pas `null`, l'attribut est du type de données non `null` correspondant. Pour les propriétés telles que `BS``L`,`M`,`NS`, et`SS`, si la valeur `Count` est supérieure à zéro, l'attribut est du type de non-zero-value données correspondant. Si toutes les data-type-specific propriétés de l'attribut sont égales à zéro `null` ou sont `Count` égales à zéro, l'attribut correspond au type de `BOOL` données.

## Créer ou remplacer un élément à l'aide d'expressions
<a name="dynamodb-expressions-put-item"></a>

L'exemple suivant présente la méthode `Amazon.DynamoDBv2.AmazonDynamoDBClient.PutItem` et un jeu d'expressions pour mettre à jour l'élément pour lequel `Title` est `18-Bicycle 301`. Si cet élément n'existe pas déjà, un nouvel élément est ajouté.

```
// using Amazon.DynamoDBv2;
// using Amazon.DynamoDBv2.Model;

var client = new AmazonDynamoDBClient();
var request = new PutItemRequest
{
  TableName = "ProductCatalog",
  ExpressionAttributeNames = new Dictionary<string, string>
  {
    { "#title", "Title" }
  },
  ExpressionAttributeValues = new Dictionary<string, AttributeValue>
  {
    { ":product", new AttributeValue { S = "18-Bicycle 301" } }
  },
  ConditionExpression = "#title = :product", 
  // CreateItemData() is a custom function.
  Item = CreateItemData()
};
client.PutItem(request);
```

Dans l'exemple précédent, la propriété `ExpressionAttributeNames` spécifie l'espace réservé `#title` pour représenter l'attribut `Title`. La propriété `ExpressionAttributeValues` spécifie l'espace réservé `:product` pour représenter la valeur `18-Bicycle 301`. La propriété `ConditionExpression` spécifie que `#title` (`Title`) doit être égal à `:product` (`18-Bicycle 301`). L'appel à `CreateItemData` fait référence à la fonction personnalisée suivante :

```
// using Amazon.DynamoDBv2.Model;

// Provides a sample item that can be added to a table.
public static Dictionary<string, AttributeValue> CreateItemData()
{
  var itemData = new Dictionary<string, AttributeValue>
  {
    { "Id", new AttributeValue { N = "301" } },
    { "Title", new AttributeValue { S = "18\" Girl's Bike" } },
    { "BicycleType", new AttributeValue { S = "Road" } },
    { "Brand" , new AttributeValue { S = "Brand-Company C" } },
    { "Color", new AttributeValue { SS = new List<string>{ "Blue", "Silver" } } },
    { "Description", new AttributeValue { S = "301 description" } },
    { "Gender", new AttributeValue { S = "F" } },
    { "InStock", new AttributeValue { BOOL = true } },
    { "Pictures", new AttributeValue { L = new List<AttributeValue>{ 
      { new AttributeValue { M = new Dictionary<string,AttributeValue>{
        { "FrontView", new AttributeValue { S = "http://example/products/301_front.jpg" } } } } },
      { new AttributeValue { M = new Dictionary<string,AttributeValue>{
        { "RearView", new AttributeValue {S = "http://example/products/301_rear.jpg" } } } } },
      { new AttributeValue { M = new Dictionary<string,AttributeValue>{
        { "SideView", new AttributeValue { S = "http://example/products/301_left_side.jpg" } } } } }
    } } },
    { "Price", new AttributeValue { N = "185" } },
    { "ProductCategory", new AttributeValue { S = "Bike" } },
    { "ProductReviews", new AttributeValue { M = new Dictionary<string,AttributeValue>{
      { "FiveStar", new AttributeValue { SS = new List<string>{
        "My daughter really enjoyed this bike!" } } },
      { "OneStar", new AttributeValue { SS = new List<string>{
        "Fun to ride.",
        "This bike was okay, but I would have preferred it in my color." } } }
    } } },
    { "QuantityOnHand", new AttributeValue { N = "3" } },
    { "RelatedItems", new AttributeValue { NS = new List<string>{ "979", "822", "801" } } }
  };

  return itemData;
}
```

Dans l'exemple précédent, un exemple d'élément avec des exemples de données est renvoyé au mandataire. Une série d'attributs et de valeurs correspondantes est construite, à l'aide des types de données tels que `BOOL`, `L`, `M`, `N`, `NS`, `S` et `SS`, qui correspondent à ceux du [format de données JSON](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataFormat.html).

## Mettre à jour un élément à l'aide d'expressions
<a name="dynamodb-expressions-update-item"></a>

L'exemple suivant présente la méthode `Amazon.DynamoDBv2.AmazonDynamoDBClient.UpdateItem` et un jeu d'expressions pour modifier `Title` en `18" Girl's Bike` pour l'élément pour lequel `Id` est égal à `301`.

```
// using Amazon.DynamoDBv2;
// using Amazon.DynamoDBv2.Model;

var client = new AmazonDynamoDBClient();
var request = new UpdateItemRequest
{
  TableName = "ProductCatalog",
  Key = new Dictionary<string,AttributeValue>
  {
     { "Id", new AttributeValue { N = "301" } }
  },
  ExpressionAttributeNames = new Dictionary<string, string>
  {
    { "#title", "Title" }
  },
  ExpressionAttributeValues = new Dictionary<string, AttributeValue>
  {
    { ":newproduct", new AttributeValue { S = "18\" Girl's Bike" } }
  },
  UpdateExpression = "SET #title = :newproduct"
};
client.UpdateItem(request);
```

Dans l'exemple précédent, la propriété `ExpressionAttributeNames` spécifie l'espace réservé `#title` pour représenter l'attribut `Title`. La propriété `ExpressionAttributeValues` spécifie l'espace réservé `:newproduct` pour représenter la valeur `18" Girl's Bike`. La propriété `UpdateExpression` spécifie de modifier `#title` (`Title`) en `:newproduct` (`18" Girl's Bike`).

## Supprimer un élément à l'aide d'expressions
<a name="dynamodb-expressions-delete-item"></a>

L'exemple suivant présente la méthode `Amazon.DynamoDBv2.AmazonDynamoDBClient.DeleteItem` et un jeu d'expressions pour supprimer les éléments pour lesquels `Id` est égal à `301` et `Title` est égal à `18-Bicycle 301`.

```
// using Amazon.DynamoDBv2;
// using Amazon.DynamoDBv2.Model;

var client = new AmazonDynamoDBClient();
var request = new DeleteItemRequest
{
  TableName = "ProductCatalog",
  Key = new Dictionary<string,AttributeValue>
  {
     { "Id", new AttributeValue { N = "301" } }
  },
  ExpressionAttributeNames = new Dictionary<string, string>
  {
    { "#title", "Title" }
  },
  ExpressionAttributeValues = new Dictionary<string, AttributeValue>
  {
    { ":product", new AttributeValue { S = "18-Bicycle 301" } }
  },
  ConditionExpression = "#title = :product"
};
client.DeleteItem(request);
```

Dans l'exemple précédent, la propriété `ExpressionAttributeNames` spécifie l'espace réservé `#title` pour représenter l'attribut `Title`. La propriété `ExpressionAttributeValues` spécifie l'espace réservé `:product` pour représenter la valeur `18-Bicycle 301`. La propriété `ConditionExpression` spécifie que `#title` (`Title`) doit être égal à `:product` (`18-Bicycle 301`).

## Plus d'informations
<a name="dynamodb-expressions-resources"></a>

Pour plus d'informations et des exemples de code, consultez :
+  [DynamoDB Series - Expressions](http://blogs.aws.amazon.com/net/post/TxZQM7VA9AUZ9L/DynamoDB-Series-Expressions) 
+  [Accès à des attributs d'élément avec des expressions de projections](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.AccessingItemAttributes.html) 
+  [Utilisation d'espaces réservés pour valeurs et noms d'attributs](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ExpressionPlaceholders.html) 
+  [Spécification de conditions avec des expressions de condition](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html) 
+  [Modification d'éléments et d'attributs avec des expressions de mises à jour](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html) 
+  [Utilisation d'éléments à l'aide de l'API de AWS SDK pour .NET bas niveau](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LowLevelDotNetItemCRUD.html) 
+  [Interrogation de tables à l'aide de l'API de AWS SDK pour .NET bas niveau](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LowLevelDotNetQuerying.html) 
+  [Numérisation de tables à l'aide de l' AWS SDK pour .NET API de bas niveau](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LowLevelDotNetScanning.html) 
+  [Utilisation d'index secondaires locaux à l'aide de l'API de AWS SDK pour .NET bas niveau](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LSILowLevelDotNet.html) 
+  [Utilisation d'index secondaires globaux à l'aide de l'API de AWS SDK pour .NET bas niveau](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSILowLevelDotNet.html) 