如何在 C# 中透视列表

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# 列表。

AAA*_*ddd 7

如果你事先知道你有多少道具,你可以做这样的事情

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 并手动查询它。或使用子列表和分组名称