7
votes

Comment transformez-vous un résultat de requête LINQ à XML?

Newbie dans la Linq à XML Arena ...

J'ai une requête LINQ avec des résultats et j'aimerais transformer ces résultats en XML. Je suppose qu'il doit y avoir un moyen relativement facile de le faire, mais je ne peux pas le trouver ...

Merci!


0 commentaires

3 Réponses :


9
votes

Un exemple. Vous devriez avoir l'idée.

XElement xml = new XElement("companies",
            from company in db.CustomerCompanies
            orderby company.CompanyName
            select new XElement("company",
                new XAttribute("CompanyId", company.CompanyId),
                new XElement("CompanyName", company.CompanyName),
                new XElement("SapNumber", company.SapNumber),
                new XElement("RootCompanyId", company.RootCompanyId),
                new XElement("ParentCompanyId", company.ParentCompanyId)
                )
            );


2 commentaires

Vous avez besoin d'un .toarray () là-bas.


Pourquoi? J'ai copié ceci d'un projet de mien.



1
votes

Votre requête LINQ va retourner une sorte de graphique d'objet; Une fois que vous avez les résultats, vous pouvez utiliser n'importe quelle méthode pour la traduire en XML que vous pourriez avec des objets standard. LINQ to XML comprend de nouvelles classes XML qui présentent une façon de créer XML (voir la réponse de Rayt pour cela), mais vous pouvez également utiliser un XMLSérialiseur et mettre des attributs de votre classe / des propriétés pour contrôler la sortie XML exacte.


0 commentaires

1
votes

Le code ci-dessous fonctionnera pour "Linq aux entités". Les données doivent être dans la mémoire, effectuées avec .totarray (), afin de pouvoir travailler, en question de parler.

XElement xml = new XElement("companies",
        from company in db.CustomerCompanies.AsEnumerable()
        orderby company.CompanyName
        select new XElement("company",
            new XAttribute("CompanyId", company.CompanyId),
            new XElement("CompanyName", company.CompanyName),
            new XElement("SapNumber", company.SapNumber),
            new XElement("RootCompanyId", company.RootCompanyId),
            new XElement("ParentCompanyId", company.ParentCompanyId)
            )
        );


2 commentaires

.Asenumerable () devrait suffire à empêcher les mauvaises méthodes d'escalader dans un générateur d'expression iquérissable.


@ Springy76 Yep votre absolument raison. .Asenumerable () devrait fonctionner aussi bien, sinon mieux!