Eh bien, le Select(el => el)
ne vous fait rien de bon pour commencer.
Je vous suggère d'utiliser SingleOrDefault
:
var productId = element.Elements("ProductId").SingleOrDefault();
if (productId != null)
filter.ProductId = Convert.ToInt32(productId.Value);
Notez que qui gère le cas où il n'y a pas éléments ProductID, mais jetteront une exception s'il y a plus d'un . Si c'est un cas valide, votre code actuel (sans l'appel Select
redondant) est raisonnable.
EDIT: Vous pourrait sortir de cela avec:
var productId = element.Elements("ProductId")
.Select(elt => elt.Value)
.SingleOrDefault();
filter.ProductId = Convert.ToInt32(productId ?? filter.ProductId.ToString());
Mais c'est assez horrible;)
Fondamentalement, vous avez une condition - que vous voulez seulement régler la ProductId
si elle est spécifié. Un « si » est la manière généralement acceptée de l'exécution du code conditionnel :)
Il existe des alternatives:
filter.ProductId = productId == null
? filter.ProductId
: int.Parse(productId);
Si vous ne me dérange pas filter.ProductId
être mis à 0 s'il n'y a pas ID spécifié, vous peut simplement utiliser:
filter.ProductId = Convert.ToInt32(element.Elements("ProductId")
.Select(elt => elt.Value)
.SingleOrDefault());
(en raison de la façon dont Convert.ToInt32
renvoie 0 lorsqu'il est passé un argument nul.)
donc il n'y a aucun moyen d'obtenir le tour de la vérification nulle? grand livre par la façon :) – AwkwardCoder