I have the following XML:
<?xml version="1.0" encoding="utf-8" ?>
<catalog>
<books>
<book id="bk101">
<author id="1">Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<cover-price>
<price>
<country>US</country>
<amount>44.95</amount>
</price>
<price>
<country>UK</country>
<amount>39.99</amount>
</price>
</cover-price>
<unit-price>
<price>
<country>US</country>
<amount>25.00</amount>
</price>
<price>
<country>UK</country>
<amount>20.00</amount>
</price>
</unit-price>
<publish_date>2000-10-01</publish_date>
<description> An in-depth look at creating applications with XML.</description>
</book>
<book id="bk102">
<author id="2">Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<cover-price>
<price>
<country>US</country>
<amount>5.95</amount>
</price>
<price>
<country>UK</country>
<amount>3.99</amount>
</price>
</cover-price>
<unit-price>
<price>
<country>US</country>
<amount>2.50</amount>
</price>
<price>
<country>UK</country>
<amount>2.00</amount>
</price>
</unit-price>
<publish_date>2000-12-16</publish_date>
<description> A former architect battles corporate zombies,an evil sorceress, and her own childhood to become
queen of the world.</description>
</book>
<book id="bk103">
<author id="3">Corets, Eva</author>
<title>Maeve Ascendant</title>
<genre>Fantasy</genre>
<cover-price>
<price>
<country>US</country>
<amount>5.95</amount>
</price>
<price>
<country>UK</country>
<amount>3.99</amount>
</price>
</cover-price>
<unit-price>
<price>
<country>US</country>
<amount>2.50</amount>
</price>
<price>
<country>UK</country>
<amount>2.00</amount>
</price>
</unit-price>
<publish_date>2000-11-17</publish_date>
<description>After the collapse of a nanotechnology society in England, the young survivors lay the foundation for
a new society. </description>
</book>
<book id="bk104">
<author id="4">Corets, Eva</author>
<title>Oberon's Legacy</title>
<genre>Fantasy</genre>
<cover-price>
<price>
<country>US</country>
<amount>5.95</amount>
</price>
<price>
<country>UK</country>
<amount>3.99</amount>
</price>
</cover-price>
<unit-price>
<price>
<country>US</country>
<amount>2.50</amount>
</price>
<price>
<country>UK</country>
<amount>2.00</amount>
</price>
</unit-price>
<publish_date>2001-03-10</publish_date>
<description>In post-apocalypse England, the mysterious agent known only as Oberon helps to create a new life for
the inhabitants of London. Sequel to Maeve Ascendant.</description>
</book>
<book id="bk105">
<author id="5">Corets, Eva</author>
<title>The Sundered Grail</title>
<genre>Fantasy</genre>
<cover-price>
<price>
<country>US</country>
<amount>5.95</amount>
</price>
<price>
<country>UK</country>
<amount>3.99</amount>
</price>
</cover-price>
<unit-price>
<price>
<country>US</country>
<amount>2.50</amount>
</price>
<price>
<country>UK</country>
<amount>2.00</amount>
</price>
</unit-price>
<publish_date>2001-09-10</publish_date>
<description>The two daughters of Maeve, half-sisters, battle one another for control of England. Sequel to
Oberon's Legacy.</description>
</book>
</books>
</catalog>
I can use the following to select a specific book
var selectedBook = from r in document.Descendants("book").Where
(r=>(string)r.Attribute("id")=="bk102")
select new
{
Author = r.Element("author").Value,
Title = r.Element("title").Value,
Genere = r.Element("genre").Value,
Price = r.Element("price").Value,
PublishDate = r.Element("publish_date").Value,
Description = r.Element("description").Value,
};
How do I then select that book's cover-price amount for the US? Every combination I've tried just returns all four of the amount fields

price element directly under book, so that's not going to work to start with.price element with the right country sub-elementprice element, you want the value of its amount child element - and I'd suggest getting that as a decimal rather than as a stringSo that means instead of this:
Price = r.Element("price").Value
You want something like:
Price = (decimal) r.Element("cover-price")
.Elements("price")
.Single(p => (string) p.Element("country") == "US")
.Element("amount")
That will still fail if there aren't any price elements with the right country. You could use this instead to obtain an appropriate decimal?:
Price = (decimal?) r.Element("cover-price")
.Elements("price")
.SingleOrDefault(p => (string) p.Element("country") == "US")
?.Element("amount")
See more on this question at Stackoverflow