2012-10-29 3 views
0

Configuration:XML - à partir de SQL Server LINQ to XML

J'ai des données XML stockées dans une base de données (SQL Server 2008 R2) qui est récupéré par le proc stocké et placé dans un DataTable. Le DataTable a 2 colonnes: un "horodatage" DateTime, et un "info" XML. Après avoir extrait ces données de la base de données, je voudrais parcourir chaque ligne et opérer sur les données en utilisant LINQ to XML en C#.

public static void ParseDataTable(DataTable dataTable) 
{ 
    for (int r = 0; r < dataTable.Rows.Count; r++) 
    { 
     // dataTable.Rows[r]["timestamp"].ToString() holds DateTime 
     // dataTable.Rows[r]["info"].ToString() holds XML 
    } 
} 

Ma question:

Quelle est la façon la plus simple d'obtenir ces données dans un objet sur lequel je peux utiliser LINQ? Quels types d'objets devraient être utilisés?

De plus:

  • S'il vous plaît ne demandez pas pourquoi xml est stocké dans la base de données, ou de recommander un autre support de stockage. Ne cherche pas à commencer une guerre sainte.
  • Si le fichier XML doit être renvoyé sous un type différent (par exemple, CAST([info] AS VARCHAR(MAX))), veuillez me le faire savoir.
  • Je voudrais plutôt utiliser LINQ pour analyser l'objet, une fois que je l'ai disponible, donc s'il vous plaît ne recommande pas d'autres méthodes.

Merci d'avance.

Répondre

2
XDocument doc = XDocument.Parse(dataTable.Rows[r]["info"].ToString()); 

Et puis vous pouvez linq away

+0

Tellement facile! Je vous remercie. Je n'avais pas trébuché sur XDocument.Parse(), ce qui rend cela très simple. De plus, reliant à une réponse Jon Skeet - toujours bon. : D –

+0

Il peut être préférable d'utiliser 'XElement.Parse' sauf si le fichier XML en question est un document complet - voir [ici] (http://msdn.microsoft.com/fr-fr/library/bb675196.aspx) et [ici] (http://stackoverflow.com/questions/1671542/whats-the-difference-between-xelement-load-and-xdocument-load). –