【问题标题】:C# Transform list from one type to anotherC# 将列表从一种类型转换为另一种类型
【发布时间】:2016-12-01 18:46:52
【问题描述】:

我正在使用 C# MVC 5 razor 将一些数据显示到表格上。我正在使用(并且无法更改)的数据在 JSON 中如下所示:

[
    {
        "Status": "New",
        "Denver": 2,
        "Seattle": 0,
        "New York": 3,
        "El Paso": 0
    },
    {
        "Status": "In Progress",
        "Denver": 1,
        "Seattle": 2,
        "New York": 5,
        "El Paso": 1
    },
    {
        "Status": "Closed",
        "Denver": 12,
        "Seattle": 2,
        "New York": 1,
        "El Paso": 3
    }
]

解析到这张表:

+-------------+--------+---------+----------+---------+
|   Status    | Denver | Seattle | New York | El Paso |
+-------------+--------+---------+----------+---------+
| New         |      2 |       0 |        3 |       0 |
| In Progress |      1 |       2 |        5 |       1 |
| Closed      |     12 |       2 |        1 |       3 |
+-------------+--------+---------+----------+---------+

我正在将此 json 反序列化为对象列表,但无法更改格式。我希望表格在视图中看起来像这样:

+----------+-----+-------------+--------+
|          | New | In Progress | Closed |
+----------+-----+-------------+--------+
| Denver   |   2 |           1 |     12 |
| Seattle  |   0 |           2 |      2 |
| New York |   3 |           5 |      1 |
| El Paso  |   0 |           1 |      3 |
+----------+-----+-------------+--------+

我尝试了多个 for 循环和 linq 选择,但无法获得它。 这是我得到的:

public class Response {
    public string Status { get; set; }
    public int Denver { get; set; }
    public int Seattle { get; set; }
    public int NewYork { get; set; }
    public int ElPaso { get; set; }
}

public class ViewModel {
    public string Name { get; set; }
    public int New { get; set; }
    public int InProgress { get; set; }
    public int Closed { get; set; }
}

List<Response> response = service.GetData();
if (response != null) {
    List<ViewModel> viewModels = response.Select(???);
}

return viewModels;

请有人用这个 select 语句为我指明正确的方向。谢谢!

【问题讨论】:

  • 城市集是固定的吗?还是可以改变?
  • 可以添加或删除 2 - 3 个城市名称,但每年只会发生一次,因此可以计划修复。

标签: c# json linq


【解决方案1】:

假设您将始终拥有相同的一组城市,您可以这样做:

var data = response.ToDictionary(x => x.Status, x => x);

var viewModels = new []
{
  new  ViewModel { Name = "Denver", New = data["New"].Denver, InProgress=data["In Progress"].Denver, Closed = data["Closed"].Denver },
  new  ViewModel { Name = "Seattle", New = data["New"].Seattle, InProgress=data["In Progress"].Seattle, Closed = data["Closed"].Seattle },
  new  ViewModel { Name = "New York", New = data["New"].NewYork, InProgress=data["In Progress"].NewYork, Closed = data["Closed"].NewYork },
  new  ViewModel { Name = "El Paso", New = data["New"].ElPaso, InProgress=data["In Progress"].ElPaso, Closed = data["Closed"].ElPaso }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-14
    • 2020-12-02
    • 2011-09-24
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 2023-01-04
    • 2011-01-24
    相关资源
    最近更新 更多