2010-08-22 5 views
2

J'ai un fichier XML où les valeurs sont stockées dans l'élément de catégorie séparés par des virgules:LINQ to XML rejoindre

<Company> 
<name>Test</name> 
<category>Power,Water,Gas</category> 
</Company> 

<Company> 
<name>Test2</name> 
<category>Water,Gas</category> 
</Company> 

Dans un autre fichier XML une seule valeur est stockée dans l'élément de la catégorie:

<Bills> 
<name>Test</name> 
<category>Power</category> 
</Bills> 

<Bills> 
<name>Test2</name> 
<category>Water</category> 
</Bills> 

Donc maintenant je dois joindre ces deux fichiers xml et obtenir tous les nœuds de la société qui contient la valeur de la catégorie du nœud Bills.

J'ai cette requête:

Xdocument fRoot = XDocument.Load("company.xml"); 
Xdocument rRoot = XDocument.Load("bills.xml"); 

var query = from f in fRoot.Elements("Company") 
         join r in rRoot.Elements("Bills") 
         on (string)f.Element("category").Value equals (string)r.Element("category").Value 
         orderby(string)f.Element("name").Value 
         select new{...} 

Avec cela, je ne reçois rien parce que les valeurs de la catégorie de nœud de l'entreprise sont stockés séparés par des virgules, et je ne sais pas comment les diviser pour faire JOIN sur ces deux fichiers.

Merci.

+1

Votre question est vague. Que voulez-vous vraiment dire en rejoignant les fichiers? Vouliez-vous les fusionner et produire des entrées séparées? La meilleure façon de clarifier votre question est de l'éditer et d'inclure un exemple de votre résultat attendu, afin que les gens puissent vous aider. –

+0

en aparté, vous n'avez pas besoin de lancer 'XElement.Value' en chaîne, car c'est une chaîne. –

Répondre

3

Vous pouvez essayer quelque chose comme ceci:

var query = from f in fRoot.Elements("Company") 
    from r in rRoot.Elements("Bills") 
    where ((string)f.Element("category").Value).Split(',').Contains((string)r.Element("category").Value) 
    orderby(string)f.Element("name").Value 
    select new new{...}; 
+0

Oh ça fonctionne. Merci. – ereyes