c# - 使用 group by 将 c# 列表转换为 json
问题描述
我已将数据表转换为 c# list ,我需要将列表转换为 json 格式,但是所有行的 json 响应都一一出现。我需要不重复 id 的 json 格式,如下所示。
ri 是包含数据的列表类型。
var listResp = r1.GroupBy(x => x.StoreId).SelectMany(x=>x).ToList();
此代码将数据表转换为列表。
public static List<AllInvoicesModel> InvoiceDataList(System.Data.DataTable dataTable)
{
var retList = new List<AllInvoicesModel>();
for (int i = 0; i < dataTable.Rows.Count; i++)
{
var row = dataTable.Rows[i];
var temp = new AllInvoicesModel()
{
StoreId = Convert.ToInt32(row["StoreId"]),
storyname= Convert.ToString(row["storyname"]),
};
retList.Add(temp);
}
return retList;
}
实际结果:
[
{
"storeId": 0,
"storeName": "sdfsfd",
"partyCode": "82"
},
{
"storeId": 0,
"storeName": "sfsdfs",
"partyCode": "827"
},
{
"storeId": 1,
"storeName": "Anfffsdfs",
"partyCode": "827",
"displayPartyCode": "2477"
}
]
但我需要这种格式的响应,将单独的 storeid 分组
{
[
"storedId":0,
"isSelected":true,
"invoiceslist":[
{
"storeName": "sdfsfd",
"partyCode": "82"
},
{
"storeName": "Ansdf",
"partyCode": "827"
}
],
"storedId":1,
"isSelected":true,
"invoiceslist":[
{
"storeName": "sdfsfd",
"partyCode": "82"
}
]
]
}
解决方案
有一个 LINQ 扩展.GroupBy
可以为你做这件事。
var grouped = retList
.GroupBy(r => { r.storedId, r.isSelected })
.Select(g => new {
storedId = g.Key.storedId,
isSelected = g.Key.isSelected,
invoicesList = g.Select(i => new {
storeName = i.storeName,
partyCode = i.partyCode
})
));
推荐阅读
- javascript - 为什么在 for 循环中使用 document.getElementById('').innerHTML 和 document.write() 的结果不一样?
- python - 与列表中的前缀和后缀单词匹配并返回一个包含所有链接单词的字符串
- bash - 检查字符串是否存在于bash中的字符串数组中
- javascript - 创建触发器的代码。付款确认将触发 DB FORM 提交按钮
- abap - 按 STRING 类型的列选择
- python - 使用 Pandas 合并每日和每月时间序列
- c++ - C++ 使用可变参数存储回调
- reactjs - 异步列出表中来自另一个对象的值
- javascript - 按 id 从数组中删除对象
- ios - PHAsset 到 UIImage,