2009-07-30 5 views
3

Comment puis-je sélectionner la valeur où id == id & & clé == clé avec LinqComment puis-je sélectionner XElements où Attribute ... (LINQ2XML)

xml:

<Localization>  
    <Module id="Customers"> 
    <CultureCode>de-DE</CultureCode> 
    <Key>General</Key> 
    <Value>Allgemeine Kunden</Value> 
    </Module>  
    <Module id="Contract"> 
    <CultureCode>de-DE</CultureCode> 
    <Key>General</Key> 
    <Value>Allgemeine Verträge</Value> 
    </Module>  
</localization> 

ce ma approche

Methode (module de chaîne, clé de chaîne) ...

var value = (from l in localization.Elements("Localization").Elements("Module") 
      where l.Attribute("id").Equals(module) && l.Element("Key").Value.Equals(key) 
      select l.Element("Value").Value); 

Répondre

7

Assu ming module est une chaîne, le problème est que vous comparez un XAttribute avec un string.

est ici une version fixe de la requête:

var value = (from l in localization.Elements("Localization").Elements("Module") 
      where (string) l.Attribute("id") == module && 
        l.Element("Key").Value == key 
      select l.Element("Value").Value); 

Notez que je suis la coulée XAttribute à la chaîne plutôt que d'utiliser la propriété Value de sorte que si l'attribut id n'existe pas, il sera tout simplement pas correspondre plutôt que de sauter.

Si vous voulez une valeur unique, vous devez appeler Single, First, SingleOrDefault ou FirstOrDefault sur le résultat en fonction de ce que la sémantique que vous voulez.

+0

thx! cela fonctionne bien pour moi, j'ai eu des problèmes avec "localization.Elements (" Localisation "). Elements (" Module ")" aussi, et je change cela à: localisation.Elements() et maintenant le travailler:) –

Questions connexes