Personnellement, je trouve que LINQ to SQL + LINQ to XML fonctionne très bien, tant que le résultat est assez petit pour tenir confortablement dans la mémoire (c'est-à-dire que ce n'est pas aussi bon pour une solution de streaming). Par exemple, j'ai une seule instruction (très grande) qui convertit les éléments de ma base de données en flux RSS. C'est fondamentalement une approche déclarative, et cela fonctionne bien. Il est quelque chose comme ceci:
XDocument doc = new XDocument(
new XDeclaration("1.0", "UTF-8", "yes"),
new XElement("rss",
new XAttribute("version", "2.0"),
new XElement("channel",
new { title="C# in Depth news",
link ="http://csharpindepth.com/News.aspx",
description = "C# in Depth news items",
language = "en-gb",
generator = "LINQ",
docs = "http://blogs.law.harvard.edu/tech/rss",
pubDate = DateTimeOffset.UtcNow.ToString
(Rfc822Format, CultureInfo.InvariantCulture),
lastBuiltDate = items.First().CreatedDate.ToString
(Rfc822Format, CultureInfo.InvariantCulture),
}.AsXElements(),
items.Select(item =>
new XElement("item",
new { title=item.Title,
link=string.Format(LinkFormat, item.NewsItemID),
description=item.Summary,
author="[email protected]",
pubDate = item.CreatedDate.ToString
(Rfc822Format, CultureInfo.InvariantCulture)
}.AsXElements()
)
)
)
)
);
qui utilise une méthode peu d'extension, je dois convertir des types anonymes en XElements - il est disponible en MiscUtil, et fait la chose évidente.
(Et oui, je devrais probablement avoir une méthode pour convertir des dates au format RFC822 ...)