I would like to summarize the list of activities by the number of entries by day over the past week using Linq to Entities. For example, let's say I have such data in my database:
Id | Date 1 | 2011-09-30 0:00:0 2 | 2011-10-02 0:00:00 3 | 2011-10-02 0:00:00 4 | 2011-10-02 0:00:00 5 | 2011-10-04 0:00:00 6 | 2011-10-04 1:30:30 7 | 2011-10-04 0:00:00 8 | 2011-10-06 0:00:00
and let's say that today is 2011-10-07
I would like to create the following:
Date | Count 2011-10-01 | 0 2011-10-02 | 3 2011-10-03 | 0 2011-10-04 | 3 2011-10-05 | 0 2011-10-06 | 1 2011-10-07 | 0
Here is an example of a method that I can use to group events by date, but I don't have enough zeros.
// Using Linq to Objects for demonstration purpose only var activities = new List<Activity>(); activities.Add(new Activity { Id = 1, Date = new DateTime(2011, 9, 30)}); activities.Add(new Activity { Id = 2, Date = new DateTime(2011, 10, 2)}); activities.Add(new Activity { Id = 3, Date = new DateTime(2011, 10, 2)}); activities.Add(new Activity { Id = 4, Date = new DateTime(2011, 10, 2)}); activities.Add(new Activity { Id = 5, Date = new DateTime(2011, 10, 4)}); activities.Add(new Activity { Id = 6, Date = new DateTime(2011, 10, 4, 1, 30, 30) }); activities.Add(new Activity { Id = 7, Date = new DateTime(2011, 10, 4)}); activities.Add(new Activity { Id = 8, Date = new DateTime(2011, 10, 6)}); var data = (from a in activities group a by a.Date.Date into g where g.Key > DateTime.UtcNow.AddDays(-7) select new { Date = g.Key, Count = g.Count() }).ToList();
Here is the result:
Date | Count 2011-10-02 | 3 2011-10-04 | 3 2011-10-06 | 1
Does anyone know how I can include missing zeros using Linq for Entities? I could always list the results as soon as I have it in memory, but it would be nice to get it directly from the database.