1
var result = lst
    .GroupBy(l => l.BirthDate)
    .Select(cl => new
    {
        BirthDate = cl.First().BirthDate,
        Count = cl.Count().ToString()
    }).ToList();
DataTable dt = Utility.ConvertToDataTable(result);
chart2.DataSource = dt;
chart2.Name = "BirthDate";
chart2.Series["Series1"].XValueMember = "BirthDate";
chart2.Series["Series1"].YValueMembers = "Count";
this.chart2.Titles.Remove(this.chart1.Titles.FirstOrDefault());
this.chart2.Titles.Add("Weekly Enrollment Chart");
chart2.Series["Series1"].IsValueShownAsLabel = true;

This displays all the dates present in the datagridview. I want to display the weekly Birthdate and count the number of births.

Nimantha
  • 6,405
  • 6
  • 28
  • 69

1 Answers1

1

You can group by the week number in the year:

lst.GroupBy(b => { 
    var firstDayOfYear = new DateTime(b.BirthDate.Year, 1, 1);
    // Calculate the days after which the first day 
    // of year appears so we can offset it when calculating week number
    int daysAfterSunday = -1;
    while(firstDayOfYear.DayOfWeek != DayOfWeek.Sunday) {
        daysAfterSunday++;
        firstDayOfYear = firstDayOfYear.AddDays(-1);
    }
    return (b.BirthDate.DayOfYear + daysAfterSunday)/7;
})
.Select(g => new { Week = g.Key, Count = g.Count(), BirthDates =  g.Select(v => v.BirthDate) });

Then you can calculate the week start date from week number using the methods in this answer.

Saravana
  • 37,852
  • 18
  • 100
  • 108