Как получить имя атрибута динамически без указания имени атрибута? - PullRequest
0 голосов
/ 13 августа 2010

Я занимаюсь разработкой мобильного приложения asp.net.Я использую LINQ to XML для запроса файла XML.Я использую следующий запрос для динамического извлечения имени и значения запроса следующим образом:

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
                     };

В следующем заявлении вышеупомянутого запроса я хочу получить имя атрибута динамически без явного указания имениатрибут

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

Здесь я явно указываю имя.Я хочу, чтобы код, который может динамически получить имя атрибута.Я новичок в Linq для XML.Подскажите, пожалуйста, как это можно сделать программно?или вы можете предоставить мне ссылку, по которой я могу решить вышеуказанную проблему?

Ответы [ 2 ]

0 голосов
/ 13 августа 2010

Кажется, вы ищете что-то вроде:

// ...
select new
{
    SlotName = SLT.Attributes().First().Name,
    SlotValue = SLT.Attributes().First().Value
};
0 голосов
/ 13 августа 2010

Если я вас правильно понимаю, вы всегда можете передать переменную в запрос 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  
                 }; 
...