Projecting into an X-DOM
You can also use LINQ queries to project into an X-DOM. The source can be anything over which LINQ can query, such as:
LINQ to SQL
Tables
A local collection
Another X-DOM
Regardless of the source, the strategy is the same in using LINQ to emit an X-DOM: you first write a functional construction expression that produces the desired X-DOM shape, and then build a LINQ query around the expression.
For instance, suppose we wanted to retrieve customers from a database into the following XML:
<customers>
<customer
id=
"1"
>
<name>
Sue</name>
<buys>
3</buys>
</customer>
...</customers>
We start by writing a functional construction expression for the X-DOM using simple literals:
var customers = new XElement ("customers", new XElement ("customer", new XAttribute ("id", 1), new XElement ("name", "Sue"), new XElement ("buys", 3) ) );
We then turn this into a projection and build a LINQ query around it:
var customers = new XElement ("customers",from c in dataContext.Customers
select
new XElement ("customer", new XAttribute ("id",c.ID),
new XElement ("name",c.Name),
new XElement ("buys",c.Purchases.Count)
) );
Here’s the result:
<customers>
<customer
id=
"1"
>
<name>
Tom</firstname>
<buys>
3</buys>
</customer>
<customer
id=
"2"
>
<name>
Harry</firstname>
<buys>
2</buys>
</customer>
...</customers>
The outer query in this case defines the line at which the query
transitions from being a remote LINQ to SQL query to a local LINQ to
enumerable query. XElement
’s constructor doesn’t know ...
Get LINQ Pocket Reference now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.