我有一个具有以下结构的列表,
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
我正在尝试将其转换/转换为以下结构,
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
编辑: 实际上,该列表非常大,可以有 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)
});
为简洁起见,我粘贴了实际格式,而不是 C# 列表。
最佳答案
如果你事先知道你有多少 Prop ,你可以这样做
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)
});
如果您的这个 Prop 列表是动态的,您将不得不在服务器上调用 pivot 并手动查询它。或使用子列表和分组名称
关于c# - 如何在 C# 中旋转列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51978728/