c# - 如何在 C# 中旋转列表

标签 c# .net 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

我正在尝试将其转换/转换为以下结构,

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/

相关文章:

c# - 查询有关 asp.net 中的 session

c# - 将对象添加到 LINQ 中的字典值?

c# - 如何在 Asp.net 中获取 CheckBoxList 中的选定项

c# - 使用 EPPlus 库使用 C# 直接在 FTP 上创建 Excel 文件

linq - 合并 2 个列表并删除重复项。在第三个列表中输出。我的尝试不起作用

c# - 在 C# 代码中使用 LINQ 读取 icollection 数据

c# - Windows 窗体 WebBrowser 控件 - 支持 Javascript?

c# - 在 Windows CE 中以编程方式调用现有连接?

c# - LINQ:获取表详细信息

c# - 我可以传入 T.Property 吗?另外,改进这种方法的想法?