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

问题描述 投票:0回答:1

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

"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循环。任何建议对我都很有帮助。

提前致谢。

c# .net linq lambda
1个回答
0
投票

假设您想使用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) });
© www.soinside.com 2019 - 2024. All rights reserved.