Efficiency of nested LINQ foreach loops
Actually reviewing your question again it looks like what you are trying to do is to group all offerings by the same year and month and then iterate over each offering. Hence a GroupBy query is probably what you want:

foreach (
    var offerings in
        courses.SelectMany(x =&gt; x.Offerings)
            .Where(x =&gt; !string.IsNullOrEmpty(x.StartDate))
            .Select(x =&gt;
                    new {
                        Offer = x,
                        StartDateMonth = new DateTime(DateTime.Parse(x.StartDate).Year, DateTime.Parse(x.StartDate).Month, 1)
                    })
            .GroupBy(x =&gt; x.StartDateMonth)
            .OrderBy(g =&gt; g.Key))
{

    //some display code using the writer
    // offerings will be a group of offerings which have the StartDate in the same year/month

    foreach (var offering in offerings.Select(o =&gt; o.Offer))
    {
        // iterate over all offers in the group
    }
}


Not sure if there is a nice effective way to avoid the double parsing.