Complex queries can be solved with a combination of simpler LINQ queries, anonymous objects and the Group/By/Into clauses. Using Group/By/Into will also give you the best possible performance for ...
edit: I didn't read the whole question. :facepalm: But basically, grouping by the day of week in place of date should get you where you want to go. Start with the query you posted above, then use that ...