Onu*_*alp 8 c# linq pivot list
我有以下动态列表
Crew NameSurname Period Result
ABC John DOE Q1 54,09
ABC John DOE Q2 59,57
ABC John DOE Q3 62,11
Run Code Online (Sandbox Code Playgroud)
如何在linq中获得此结果.
Crew NameSurname Q1 Q2 Q3
ABC John DOE 47,51 47,51 51,46
Run Code Online (Sandbox Code Playgroud)
我试过这种方式,但我无法得到结果
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)
});
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
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<PivotedCrew>();
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
});
}
Run Code Online (Sandbox Code Playgroud)
但是你需要定义一个新类.就像是:
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;}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3461 次 |
| 最近记录: |