Sim*_*ons 3 .net c# linq pivot
我有一个具有以下结构的列表,
TimeStamp Name Value
---------------------------------------
01/May/2018 Prop1 5
07/May/2018 Prop1 9
01/May/2018 Prop2 8
07/May/2018 Prop2 11
01/May/2018 Prop3 18
07/May/2018 Prop3 7
.....................................................
......................................................
07/May/2018 Prop(N) (N)Value
Run Code Online (Sandbox Code Playgroud)
我正在尝试将其旋转/转换为以下结构,
TimeStamp Prop1 Prop2 Prop3 .... PropN Value
---------------------------------------------------------------------------------------------
01/May/2018 5 8 18 (N)th Value 31+(N)th Value
07/May/2018 9 11 7 (N)th Value 27+(N)th Value
Run Code Online (Sandbox Code Playgroud)
编辑: 实际上,该列表非常大,可以有 100 个名称,并且在将其加载到内存中之前不会知道这些值。因此,不可能检查@TheGeneral 提到的名称,但如果我们的值集有限并且我们事先知道它们,它就可以工作。
我尝试使用 grouping 来执行此操作,但这可能不是方法。
var pivotList= customersList.GroupBy(cust => new { cust.Name, cust.Timestamp, cust.Value }).Select(x => new {
TimeStamp = x.Key.Timestamp,
Circuit = x.Key.Name,
NumData = x.Sum(y=>x.Key.Value)
});
Run Code Online (Sandbox Code Playgroud)
为简洁起见,我粘贴了实际格式而不是 C# 列表。
如果你事先知道你有多少道具,你可以做这样的事情
var query = myList
.GroupBy(c => c.TimeStamp)
.Select(g => new {
TimeStamp = g.Key,
Prop1 = g.Where(x => x.Name == "Prop1").Sum(x => x.Value),
Prop2 = g.Where(x => x.Name == "Prop2").Sum(x => x.Value),
Prop3 = g.Where(x => x.Name == "Prop3").Sum(x => x.Value),
Value = g.Sum(c => c.Value)
});
Run Code Online (Sandbox Code Playgroud)
如果你这个 props 列表是动态的,你将不得不在服务器上调用 pivot 并手动查询它。或使用子列表和分组名称