私は最終的にこれに対する答えを自分で理解しました。System.Xml.LINQで、LINQ式からオンザフライでXML構造を作成できるXStreamingElementというクラスを発見しました。これは、DataTableをXML空間にキャストする例です。
Dictionary<string,DataTable> Tables = new Dictionary<string,DataTable>();
// ... populate dictionary of tables ...
XElement TableRoot = new XStreamingElement("Tables",
from t in Tables
select new XStreamingElement(t.Key,
from DataRow r in t.Value.Rows
select new XStreamingElement("row",
from DataColumn c in t.Value.Columns
select new XElement(c.ColumnName, r[c])))))
結果は、ディクショナリに2行の「Orders」という1つのテーブルが含まれていると仮定すると、次のような構造のXElement(TableRoot)になります。
<Tables>
<Orders>
<row>
<sku>12345</sku>
<quantity>2</quantity>
<price>5.95</price>
</row>
<row>
<sku>54321</sku>
<quantity>3</quantity>
<price>2.95</price>
</row>
</Orders>
</Tables>
これは、より大きなXElement / XDocumentベースの階層とマージして、XPathで照会できます。