在linq中使用数据透视表

我有以下动态列表

Crew NameSurname Period Result ABC John DOE Q1 54,09 ABC John DOE Q2 59,57 ABC John DOE Q3 62,11 

如何在linq中获得此结果。

 Crew NameSurname Q1 Q2 Q3 ABC John DOE 47,51 47,51 51,46 

我试过这种方式,但我无法得到结果

 List.GroupBy(c => c.PersonnelID) .Select(g => new { PersonnelID = g.Key, Period1 = g.Where(c => c.Period == 1).Sum(c => c.Result), Period2 = g.Where(c => c.Period == 2).Sum(c => c.Result), Period3 = g.Where(c => c.Period == 3).Sum(c => c.Result) }); 

你可以这样做:

 var results = Data.GroupBy(l => new { l.Crew, l.NameSurname}); .SelectMany( (key, g) => new { Crew = Key.Crew, NameSurname = Key.NameSurname, groups = g }); var pivoted = new List(); foreach(var item in results) { pivoted.Add( new PivotedCrew { Crew = item.Crew, NameSurname = item.NameSurname, Q1 = item.groups.Where(x => x.Period == "Q1") .FirstOrDefault().value, Q2 = item.groups.Where(x => x.Period == "Q2") .FirstOrDefault().value, Q3 = item.groups.Where(x => x.Period == "Q3") .FirstOrDefault().value }); } 

但是你需要定义一个新类。 就像是:

 public class PivotedCrew { public string Crew Id {get; set;} public string NameSurname {get; set;} public string Q1 {get; set;} public string Q2 {get; set;} public string Q3 {get; set;} }