使用Linq在两个嵌套的List <T>中透视数据

mdz*_*iec 5 c# linq pivot-table

我有以下类结构:

class Employee()
{
  public String Name { get; set; }
  public List<WorkDay> WorkDays { get; set; }
}

class WorkDay()
{
  public DateTime Date { get; set; }
  public Int Hours { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

是否可以List<Employee>使用Linq 进行数据透视,所以我的DataGridView中有这样的结果:

           | Name    | Name    |...| Name      |
Date       | Hours   | Hours   |   | Hours     |
Date       | Hours   | Hours   |   | Hours     |   
Date       | Hours   | Hours   |   | Hours     |
Date       | Hours   | Hours   |   | Hours     |
...        | Hours   | Hours   |   | Hours     |
Run Code Online (Sandbox Code Playgroud)

它很棘手,因为它是两个嵌套列表,我只找到了单个列表的例子,非常简单. 是否可以使用LINQ旋转数据?

我到了这一步,但还没到那里:

var _result = Employees.SelectMany(x => x.WorkDays)
                       .GroupBy(x => x.Date)
                       .Select(y => new
                                    {
                                        DATE = y.Key,
                                        NAME = y.Select(z => z.Employee.Name).ToArray()
                                    })
                       .ToList();
Run Code Online (Sandbox Code Playgroud)

我将不胜感激任何建议.

Rah*_*ngh 2

我想你需要这个:-

var result = employees.SelectMany(x => x.WorkDays, (employeeObj, workDays) => 
                                                   new { employeeObj, workDays })
                      .GroupBy(x => x.workDays.Date)
                      .Select(x => new
                             {
                                Date = x.Key,
                                NameAndHours = x.Select(z => 
                                    new { 
                                            Name = z.employeeObj.Name, 
                                            Hours = z.workDays.Hours 
                                        })
                             }).ToList();
Run Code Online (Sandbox Code Playgroud)

这是带有一些示例数据的工作小提琴。