使用连接创建动态数据透视表列表
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) });
以上是关于使用连接创建动态数据透视表列表的主要内容,如果未能解决你的问题,请参考以下文章