首页 > 解决方案 > 使用 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"
        }
        ]
    ]
}

标签: c#

解决方案


有一个 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
        })
    ));

推荐阅读