使用连接创建动态数据透视表列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用连接创建动态数据透视表列表相关的知识,希望对你有一定的参考价值。

我想在列表上创建具有以下格式数据的动态透视列表

"products" : 
    {
        "name": "ABC",       
        "Variance": [
                    {
                        "Date": "01-01-2018",                
                        "Value": "10"
                    },
                    {
                        "Date": "02-01-2018",                
                        "Value": "11"
                    },
                    {
                        "Date": "03-01-2018",                
                        "Value": "12"
                    },
            ]
    },
    {
        "name": "XYZ",       
        "Variance": [
                    {
                        "Date": "01-01-2018",                
                        "Value": "22"
                    },
                    {
                        "Date": "03-01-2018",                
                        "Value": "24"
                    },
                    {
                        "Date": "04-01-2018",                
                        "Value": "28"
                    },
            ],


    },
    {
        "name": "PQR",       
        "Variance": [
                    {
                        "Date": "01-01-2018",                
                        "Value": "20"
                    },
                    {
                        "Date": "02-01-2018",                
                        "Value": "22"
                    },
                    {
                        "Date": "04-01-2018",                
                        "Value": "24"
                    },
            ],
    }

我想创建数据透视表列表,以便它可以返回数据

"NewProducts":[{
        "Date": "01-01-2018", 
        "ABC" : "10"
        "XYZ" : "22",
        "PQR" : "20"
    },
    {
        "Date": "02-01-2018", 
        "ABC" : "11"
        "XYZ" : "null",
        "PQR" : "22"
    },
    {
        "Date": "03-01-2018", 
        "ABC" : "12"
        "XYZ" : "24",
        "PQR" : "null"
    },
    {
        "Date": "04-01-2018", 
        "ABC" : "null"
        "XYZ" : "28",
        "PQR" : "24"
    }]

我尝试了一些在内部列表上加入的方法,但没有获得所需的结果。我想避免循环,因为我的产品列表会根据选择而有所不同。我能够使用for循环加入列表,但我希望尽可能少地使用for循环。任何建议对我都很有帮助。

提前致谢。

答案

假设您想使用Dictionary<string,int>来保存动态值对,您可以先使用SelectMany将嵌套结构展平为一个新的平面列表,然后按Date进行分组,从而使用LINQ:

var ans = products.SelectMany(p => p.Variance.Select(v => new { p.name, v.Date, v.Value }))
                  .GroupBy(pv => pv.Date)
                  .Select(pvg => new { Date = pvg.Key, Fields = pvg.ToDictionary(p => p.name, p => p.Value) });

以上是关于使用连接创建动态数据透视表列表的主要内容,如果未能解决你的问题,请参考以下文章

sql 在postgresql中使用动态列名创建交叉表/数据透视表形式的hstore字段

OpenXML 动态创建“表/数据透视表”

Excel数据透视表、切片器如何做?

如何使用 Eloquent 在数据透视表中插入多行?

将 sql 数据从数据透视表存储过程导出到 excel

如何使用数据透视表或分组表来划分这些值