Someone asked me what the difference between descendants and elements is, I thought I'd post the details here for common interest.
Descendants will yield you elements of your choice from the entire source element sub-tree, whereas Elements will yield the child elements only.
E.g.
string xml = @"
<Root>
<Item>
<id>1</id>
</Item>
<Item>
<id>2</id>
</Item>
<Item>
<id>3</id>
<Items>
<Item>
<id>5</id>
</Item>
<Item>
<id>6</id>
</Item>
</Items>
</Item>
<Item>
<id>4</id>
</Item>
</Root>";
XDocument doc1 = XDocument.Parse(xml);
var q1 = from e in doc1.Root.Descendants("Item")
select e;
var q2 = from e in doc1.Root.Elements("Item")
select e;
int c1 = q1.Count(); //6
int c2 = q2.Count(); //4