【问题标题】:How to convert a C# list of objects in a nested key:value format using LINQ in C#?如何在 C# 中使用 LINQ 以嵌套键:值格式转换 C# 对象列表?
【发布时间】:2019-08-29 09:23:52
【问题描述】:

我正在构建一个 .NET Core Web API,我必须从数据库中结构糟糕的单个表中查询大量数据。我想在将数据发送回前端客户端之前将其转换为更易读的格式。

我尝试使用 GroupBy,但即使数据被正确“分隔”,我也无法实现我正在寻找的格式:对象中没有节点,也没有逻辑分隔/嵌套。

var byDayGrouped = context.Lavori
                .Where(x => x.datetime != null)
                .GroupBy(row => new
                {
                    row.datetime.Year,
                    row.datetime.Month,
                    row.datetime.Day,
                    row.datetime.WorkerName
                })
                .ToList();

这是我正在寻找的格式:

data: {
    '01.01.2019': [
        workerName: [
            work1: {
                ...
            },
            ...
        ],
        ...
    ]
    '02.01.2019': [
        ...
    ]
}

这是我得到的:

[
    [
        {
            ...
        },
        ...
    ]
]

【问题讨论】:

    标签: c# entity-framework linq group-by


    【解决方案1】:

    您正在寻找字典,因为字典将被序列化为 JSON 对象,其中每个字典的键将成为对象的属性。

    字典的键可以是您想要的任何类型,在这种情况下,您需要一个字符串作为字典的键,您将使用 IEnumerable<T> 作为值,其中 T 是您的 Lavori 对象的任何类型。

    我不太确定您写的 GroupBy 是否按您想要的方式分组,因为您也是按 workerName 分组的。

    假设您只想要没有时间部分的日期(这就是我的想法,因为您按YearMonthDay 分组)以下应该适合您:

    
    //Using .Date will remove the time part from a DateTime
    var dictionary = Lavori.GroupBy(l => l.datetime.Date)
         .ToDictionary(l => l.Key.ToString("dd.MM.yyyy"), l => l);
    
    

    使用这个小提琴来解决这个问题:https://dotnetfiddle.net/rPNRvC

    【讨论】:

      猜你喜欢
      • 2022-12-15
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 2018-06-24
      • 2021-11-02
      • 1970-01-01
      相关资源
      最近更新 更多