首页 > 解决方案 > 如何在 AutoMapper 中进行聚合?

问题描述

我正在一个项目中工作,该项目使用 AutoMapper 从我们的 ORM(对象关系映射器)POCO(普通旧 CLR 对象)映射到我们呈现给 UI 的视图模型。

我有一个例子,这样做涉及聚合记录。

作为我们输入的 POCO:

public class WorkRecord
{
    public int id {get; set; }
    public string work { get; set; }
    public string type { get; set; }
    public string result { get; set; }
}

以及我们想要的输出:

public class WorkViewModel
{
    public string Work { get; set; }
    public List<WorkInstance> WorkInstances { get; set; }

    public class WorkInstance
    {
        public string Type { get; set; }
        public string Result { get; set; }
    }
}

我想要的是将 WorkRecords 列表转换为 WorkViewModels 列表,其中 WorkViewModels 输出的数量与 WorkRecords 的数量不同。

我想要为每个不同的 WorkRecord.work 一个 WorkViewModel,并为每个带有该 WorkRecord.work 的 WorkRecord 创建一个子 WorkViewModel.WorkInstance。

例如:

[
    {id: 1, work: "WorkA", type: "Type1", result: "Success"},
    {id: 2, work: "WorkA", type: "Type2", result: "Failure"},
    {id: 3, work: "WorkB", type: "Type3", result: "Success"},
    {id: 4, work: "WorkB", type: "Type4", result: "Failure"},
]

应该导致:

[
    {
        Work: "WorkA",
        WorkInstances: [
            WorkInstance: {
                Type: "Type1",
                Result: "Success"
            },
            WorkInstance: {
                Type: "Type2",
                Result: "Failure"
            }
        ]
    },
    {
        Work: "WorkB",
        WorkInstances: [
            WorkInstance: {
                Type: "Type3",
                Result: "Success"
            },
            WorkInstance: {
                Type: "Type4",
                Result: "Failure"
            }
        ]
    }
]

我没有在 AutoMapper 中看到这样做的好方法。

有任何想法吗?


编辑以修复 WorkInstance 声明的语法。

我还没想明白的是如何将n 个输入对象的集合映射到m个输出对象,其中m < n

标签: c#linqautomapper

解决方案


推荐阅读