【发布时间】:2019-12-13 03:57:40
【问题描述】:
我有一个关于 Automapper 的问题, 我有一个平面的对象列表,我必须在转换后的 DTO 对象中返回到前端,比方说, 列表
List<Cars> list =
Cars
{
public string PartCode { get; set; }
public bool Enabled { get; set; }
public string CarCode { get; set; }
public int CarId { get; set; }
public int PartId { get; set; }
}
我需要将它映射到对象:
public class CarsDTO
{
public int CarId;
public string CarCode;
public List<PartsDTO> CarParts;
}
public class PartDTO
{
public Part Id;
public string PartCode;
public bool Enabled;
}
以及示例数据:
part_id part_code car_id car_code enabled
1 WINDOW 1 MUSTANG true
2 WHEELS 1 MUSTANG true
3 BUMPER 2 MONDEO true
4 HOOD 2 MONDEO false
5 WINDSHIELD 2 MONDEO true
6 TIRE 3 KA true
7 STEERING_WHEEL 4 FOCUS false
8 TRANSMISSION 4 FOCUS true
并在json中映射后提出输出:
"parts": [
{
"carId": 1,
"carCode": "MUSTANG",
"carParts": [
{
"id": 1,
"partCode": "WINDOW",
"enabled": true
},
{
"id": 2,
"partCode": "WHEELS",
"enabled": true
}
]
},
{
"carId": 2,
"carCode": "MONDEO",
"carParts": [
{
"id": 3,
"partCode": "BUMPER",
"enabled": true
},
{
"id": 4,
"partCode": "HOOD",
"enabled": false
},
{
"id": 5,
"partCode": "WINDSHIELD",
"enabled": true
}
]
},
{
"carId": 3,
"carCode": "KA",
"carParts": [
{
"id": 6,
"partCode": "TIRE",
"enabled": true
},
]
},
{
"carId": 4,
"carCode": "FOCUS",
"carParts": [
{
"id": 7,
"partCode": "STEERING_WHEEL",
"enabled": false
},
{
"id": 8,
"partCode": "TRANSMISSION",
"enabled": true
]
}
]
我已经设法通过以下查询在 Linq 中映射对象:
List<CarParts> carParts = new List<CarParts>();
List<CarPartsList> list = (from t in carParts
group t by new { t.CarCode, t.CarId }
into grp
select new CarPartsList()
{
GroupCode = grp.Key.CarCode,
GroupId = grp.Key.CarId,
GroupRights = (from
carPart in carParts
where userRight.CarCode == grp.Key.CarCode
select new Part { Id = carPart.PartId, PartCode = carPart.Code, Enabled = carPart.Enabled }).ToList()
}).ToList();
但我正在进行的项目需要 Automapper 来转换 DTO 对象,我不知道解决方案:/ 我已阅读以下文档: https://docs.automapper.org/en/stable/Nested-mappings.html 但是文档中的示例太简单了,我无法使用它。
【问题讨论】:
标签: c# linq nested automapper