using System.Collections.Generic;
public static void Main()
List<Player> players = new List<Player>
new Player{Date = new DateTime(2021, 1, 1), ID = 23},
new Player{Date = new DateTime(2021, 1, 1), ID = 29},
new Player{Date = new DateTime(2021, 1, 1), ID = 24},
new Player{Date = new DateTime(2021, 1, 3), ID = 22},
new Player{Date = new DateTime(2021, 1, 3), ID = 23}
var startDate = players.OrderBy(x => x.Date)
var endDate = players.OrderBy(x => x.Date)
var dates = Enumerable.Range(0, 1 + endDate.Subtract(startDate).Days)
.Select(offset => startDate.AddDays(offset))
var result = (from a in dates
select new { Date = g.Key, Count = g.Count() }
) on a.Date equals b.Date into ab
from b in ab.DefaultIfEmpty()
select new { Date = a.Date, Count = b != null ? b.Count : 0 }
foreach (var item in result)
Console.WriteLine(String.Format("Date: {0}, Count: {1}", item.Date.ToString("d/M/yyyy"), item.Count));
public DateTime Date { get; set; }
public int ID { get; set; }