2010-08-13 7 views
0

Je développe l'application mobile asp.net. J'utilise LINQ to XML pour interroger le fichier XML. J'utilise la requête suivante pour récupérer le nom & valeur de la requête dynamique comme suitComment récupérer dynamiquement le nom de l'attribut sans spécifier le nom de l'attribut?

var TotalManifolds = from MF in FieldRoot.Element("FIELD-DEFINITION").Element("MANIFOLDS").Elements("MANIFOLD") 
        join SLT in FieldRoot.Element("FIELD-DEFINITION").Element("SLOTS").Elements("SLOT") 
        on (string)MF.Attribute("MID") equals (string)SLT.Attribute("PARENT") 
        select new 
        { 
         SlotName = (string)SLT.Attribute("NAME").Value, 
         SlotValue = (string)SLT.Attribute("NAME").Value 
        }; 

Dans la déclaration suivante de requête ci-dessus, je veux récupérer le nom de l'attribut dynamique sans spécifier explicitement le nom de l'attribut

SlotName = (string)SLT.Attribute("NAME").Value 

Ici, je spécifie explicitement le nom. Je veux coder qui peut récupérer dynamiquement le nom de l'attribut. Je suis nouveau à Linq au xml. Pouvez-vous s'il vous plaît dire comment cela peut être fait par programme? ou pouvez-vous me fournir le lien par lequel je peux résoudre le problème ci-dessus?

Répondre

0

Il semble que vous cherchez quelque chose comme:

// ... 
select new 
{ 
    SlotName = SLT.Attributes().First().Name, 
    SlotValue = SLT.Attributes().First().Value 
}; 
0

Si je comprends bien, vous pouvez toujours passer une variable à la requête LINQ:

var string attrName = "NAME"; // specify whatever value you need ... 

// wrap the query below in a function, if it will be reused... 
var TotalManifolds = from MF in FieldRoot.Element("FIELD-DEFINITION").Element("MANIFOLDS").Elements("MANIFOLD") 
       join SLT in FieldRoot.Element("FIELD-DEFINITION").Element("SLOTS").Elements("SLOT") 
       on (string)MF.Attribute("MID") equals (string)SLT.Attribute("PARENT") 
       select new 
       { 
        SlotName = (string)SLT.Attribute(attrName).Value, 
        SlotValue = (string)SLT.Attribute(attrName).Value 
       };