c# - C#/Linq - 按字符串数组中返回的第二项分组,同时保留父项
问题描述
我从 API 返回了以下数据,我正在尝试使用 linq 来重新塑造数据。实际上是否有可能做到这一点并获得以下预期结果。
"results": [
{
"Description": "Describe1",
"Cost": 5.00,
"Category": [
"Online",
"Games"
]
},
{
"Description": "Describe2",
"Cost": 4.00,
"Category": [
"Online",
"Games"
]
},
{
"Description": "Describe3",
"Cost": 3.00,
"Category": [
"Online",
"Grocery"
]
},
{
"Description": "Describe4",
"Cost": 3.00,
"Category": [
"Transport",
"Bus"
]
},
{
"Description": "Describe5",
"Cost": 3.00,
"Category": [
"Transport",
"Bus"
]
},
{
"Description": "Describe5",
"Cost": 10.00,
"Category": [
"Transport",
"Train"
]
}
}
我试图从上面实现的最终输出:
{ name : "Online",
data: [
{
name: Games,
value: 9.00
},
{
name : Grocery,
value: 3.00
}],
name : "Transport",
data: [
{
name: Bus,
value: 6.00
},
{
name : Train,
value: 10.00
}],
}
按 FirstOrDefault 分组对于一级统计数据来说很容易,但我看不出从哪里开始分组!
提前致谢。
解决方案
这应该有效:
class ResultItem {
public string Name { get; set; }
public double Value { get; set; }
}
class ResultGroup {
public string Name { get; set; }
public ResultItem[] Data { get; set; }
}
var results = items
.GroupBy(x => x.Category[0])
.Select(g => new ResultGroup {
Name = g.Key,
Data = g
.GroupBy(x => x.Category[1])
.Select(g2 => new ResultItem { Name = g2.Key, Value = g2.Sum(x => x.Cost) })
.ToArray()
});
推荐阅读
- database - 从函数内部的数据库中给出数字
- jquery - 将 jquery Autocomplete 与具有更改选择器的字段一起使用
- python - 如何对包含元组列表的列的数据框中的列进行分组
- ruby-on-rails - Activeadmin - 显示页面内的表单仅显示提交按钮
- amazon-web-services - 亚马逊无服务器图像处理程序,CORS 问题
- python - 将 Excel 行从一个工作簿复制到另一个工作簿
- monitoring - 如何以毫秒分辨率而不是分钟分辨率存储从 Zabbix 代理收集的数据指标
- node.js - 如何使用 nodemailer 发送 html 文件
- ios - 设置委托时出现无效的选择器错误:Xcode 10 swift 4
- google-apps-script - Google 表格中的预测