2009-12-09 3 views
1

Mon prédécesseur a donc décidé d'inclure une colonne 'xml_data' dans la base de données pour une application. Je dois maintenant utiliser certaines informations stockées dans ce fichier XML pour une autre application. Je fais une requête normale pour extraire le xml de la base de données, et j'essaie d'utiliser LINQ pour extraire les données dont j'ai besoin du XML. Voici quelques XML exemple:LINQ et XML ... ont besoin d'aide pour déboguer ce

<?xml version="1.0"?> 
<data> 
    <field> 
    <name normalized="id_num"></name> 
    <value> 
     <![CDATA[12345]]> 
    </value> 
    </field> 
    <field> 
    <name normalized="blah"></name> 
    <value> 
     <![CDATA[asdfasdf]]> 
    </value> 
    </field> 
... 
</data> 

puisque chaque ligne a son propre document XML qui suit ce modèle, je suis itérer à travers les résultats SQL et d'essayer d'extraire la valeur que j'ai besoin du XML comme ceci:

List<String> collection = new List<String>(); 
while (sqlreader.Read()) 
{ 
    XElement response = XElement.Parse(sqlreader["xml_data"].ToString()); 
    var name = from field in response.Elements("field") 
       where (string)field.Element("name").Attribute("normalized") == "id_num" 
       select field.Element("value").Value; 
    collection.Add(name.ToString()); 
} 

Je sais que ce n'est pas juste parce que je continue à obtenir ce retour au lieu de la valeur que j'ai besoin:

System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Xml.Linq.XElement,System.String] 

PS S'il vous plaît soyez doux, je suis un programmeur Python et ne suis pas vraiment familier avec C# ou .NET.

Répondre

2

Vous souhaitez utiliser name.FirstOrDefault() ou name.First() au lieu de name.ToString(). Le premier vous donnera null s'il n'a pas trouvé de champ nommé 'id_num', ce dernier lancera une exception.

Votre requête LINQ renvoie une collection (bien que dans votre cas, en supposant des données normales, il s'agira d'une collection à un seul élément).

+0

vous êtes l'homme .... –