Вы можете попробовать с этой перегрузкой из .GroupBy
:
class Program
{
static void Main(string[] args)
{
List<StatusDTO> statuses = new List<StatusDTO>
{
new StatusDTO
{
Id = 1,
Date = "8-Apr",
Status = "In Progress"
},
new StatusDTO
{
Id = 2,
Date = "8-Apr",
Status = "In Progress"
},
new StatusDTO
{
Id = 3,
Date = "8-Apr",
Status = "In Progress"
},
new StatusDTO
{
Id = 4,
Date = "8-Apr",
Status = "Done"
},
new StatusDTO
{
Id = 5,
Date = "9-Apr",
Status = "In Progress"
},
new StatusDTO
{
Id = 6,
Date = "9-Apr",
Status = "Done"
},
new StatusDTO
{
Id = 7,
Date = "9-Apr",
Status = "Done"
}
};
List<ResultStatusDTO> results = statuses.GroupBy(x => x.Date, x => x, (a, b) => new ResultStatusDTO
{
Date = a,
DoneCount = b.Count(x => x.Status == "Done"),
InProgressCount = b.Count(x => x.Status == "In Progress")
}).ToList();
}
}
public class ResultStatusDTO
{
public string Date { get; set; }
public int InProgressCount { get; set; }
public int DoneCount { get; set; }
}
public class StatusDTO
{
public int Id { get; set; }
public string Date { get; set; }
public string Status { get; set; }
}