Parsing data from XML in C#, filtering, categorizing in LINQ, displaying on Chart control
For the LINQ query at the end SelectMany is your friend.

You should be able to achieve your desired results in a single query:

var dateOfInterest = DateTime.Now; // just put in whatever date interests you

var categoryTotals = receipts
         // filter receipts by the desired month
        .Where(r =&gt; IsWithinSameMonthAndYear(r.Date, dateOfInterest))
        // select all products from all filtered receipts as a flat list
        .SelectMany(r =&gt; r.Products)
        // group the products by their category
        .GroupBy(p =&gt; p.Category)
        // turn into a dictionary keyed of the category key and the value is the weighted sum of the product quantities
        .ToDictionary(g =&gt; g.key.Key, g =&gt; g.Sum(p =&gt; p.Quantity * p.Price));


Little helper method:

// returns true if first is within the same month and year as second
private bool IsWithinSameMonthAndYear(DateTime first, DateTime second)
{
    return first.Year == second.Year &amp;&amp; first.Month == second.Month;
}