O'Reilly logo

LINQ Pocket Reference by Joseph Albahari, Ben Albahari

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

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 ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required