using System.Collections.Generic;
public static void Main()
List<Employee> employees = new List<Employee>
new Employee { Name = "John", WorkDays = new List<WorkDay>
new WorkDay { Date = new DateTime(2015,04,15), Hours = 7 },
new WorkDay { Date = new DateTime(2015,04,16), Hours = 8 }
new Employee { Name = "Alex", WorkDays = new List<WorkDay>
new WorkDay { Date = new DateTime(2015,04,12), Hours = 11 },
new WorkDay { Date = new DateTime(2015,04,15), Hours = 9 }
new Employee { Name = "Mary", WorkDays = new List<WorkDay>
new WorkDay { Date = new DateTime(2015,04,16), Hours = 9 },
new WorkDay { Date = new DateTime(2015,04,12), Hours = 10 }
var result = employees.SelectMany(x => x.WorkDays, (employeeObj, workDays) => new { employeeObj, workDays })
.GroupBy(x => x.workDays.Date)
NameAndHours = x.Select(z => new { Name = z.employeeObj.Name, Hours = z.workDays.Hours }).ToList()
foreach (var item in result)
Console.WriteLine("Date: {0}", item.Date.ToShortDateString());
foreach (var data in item.NameAndHours)
Console.WriteLine("\tName: {0}, Hours: {1}", data.Name, data.Hours);
public String Name { get; set; }
public List<WorkDay> WorkDays { get; set; }
public DateTime Date { get; set; }
public int Hours { get; set; }