2009-07-09 4 views
0

Ok,Existe-t-il un moyen facile de renvoyer le résultat FIRST LinqToXML?

J'ai une requête LinqToXml qui retourne un seul enregistrement (terminologie correcte?),

cependant, je ne veux pas utiliser pour .. boucle pour tirer qu'un enregistrement de la requête . Y a-t-il un moyen plus facile?

* bonus si vous trouvez une meilleure façon d'écrire la requête (je suis encore à apprendre)

mon fichier xml:

<?xml version="1.0"?> 
<!-- first draft of LibMappings.xml file --> 
<LibMappings> 
    <File> 
     <Name>Foundation.dll</Name> 
     <Map>Lib\Foundation</Map> 
    </File> 
</LibMappings> 

Mon code:

private static string GetMapFor(string dllName) 
{ 
     //Opens Xml File and gets "Lib" map for dllName 
     string retVal; 
    XDocument libMapFile = XDocument.Load(_libMapFilePath); 

    //This query will return 1 record 
    IEnumerable<XElement> query = from c in libMapFile.Descendants("File") 
          where (string)c.Element("Name") == dllName 
         select c.Element("Map"); 
    if (query.Count() == 1) 
    { 
     //there's only gonna be one here.. I might as well do this.. 
     foreach (string x in query) 
     { 
      retVal = x; 
      break; 
     } 

     //I'd like to do this: 
     retVal = query[0]; 

    } 
     return retVal; 
} 

Répondre

1
IEnumerable<XElement> query = from c in libMapFile.Descendants("File") 
             where (string)c.Element("Name") == dllName 
           select c.Element("Map"); 
XElement element = query.First(); 
return element.Value; 
0

Essayez ceci:

Sélectionnez c.Element ("Ma p "). Premier();

ou, si vous n'êtes pas sûr que vous obtiendrez comme résultat.

sélectionner c.Element ("Carte") FirstOrDefault();

puis vérifiez null pour voir si vous avez un résultat.

4

Vous recherchez la méthode d'extension First ou FirstOrDefault.

Ces méthodes retourneront le premier élément dans la requête. Ils ne diffèrent que dans le comportement lorsque le résultat de la requête est vide. La méthode First lancera une exception tandis que FirstOrDefault renverra la valeur par défaut pour le type d'élément dans la requête (généralement null).

var first = query.First(); 
Questions connexes