C# 如何在C.NET内核中自动映射特定条件?

C# 如何在C.NET内核中自动映射特定条件?,c#,.net-core,automapper,core,dto,C#,.net Core,Automapper,Core,Dto,我想在我的特定DTO中自动映射fill Worker类别键,但我不知道如何做。我在构建解决方案时没有遇到任何错误,但是当我进行API调用时,它会触发一个错误 你能帮我吗 public class WorkerRD { public int Id { get; set; } public string Login { get; set; } public string Role { get; set; } public str

我想在我的特定DTO中自动映射fill Worker类别键,但我不知道如何做。我在构建解决方案时没有遇到任何错误,但是当我进行API调用时,它会触发一个错误

你能帮我吗

public class WorkerRD
    {
        public int Id { get; set; }
        public string Login { get; set; }
        public string Role { get; set; }
        public string Firstname { get; set; }
        public string Lastname { get; set; }
        public string AvatarUrl { get; set; }
        public string Iso { get; set; }
        public string Sexe { get; set; }
        public string Email { get; set; }
        public string Phone { get; set; }
        public int WorkerCategoryKey { get; set; }
        public string Address { get; set; }
        public string Postcode { get; set; }
        public string Locality { get; set; }

        public IEnumerable<TrWorkerToWorkerCategory> trWorkerToWorkerCategory { get; set; }
    }

CreateMap<TUser, WorkerRD>()
                .ForMember(
                    dest => dest.Firstname,
                    opt => opt.MapFrom(src => src.TWorker.Firstname)
                ).ForMember(
                    dest => dest.Lastname,
                    opt => opt.MapFrom(src => src.TWorker.Lastname)
                ).ForMember(
                    dest => dest.Email,
                    opt => opt.MapFrom(src => src.TWorker.Email)
                ).ForMember(
                    dest => dest.Phone,
                    opt => opt.MapFrom(src => src.TWorker.Phone)
                ).ForMember(
                    dest => dest.Sexe,
                    opt => opt.MapFrom(src => src.TWorker.Sexe)
                ).ForMember(
                    dest => dest.Address,
                    opt => opt.MapFrom(src => src.TWorker.Address)
                ).ForMember(
                    dest => dest.Postcode,
                    opt => opt.MapFrom(src => src.TWorker.Postcode)
                ).ForMember(
                    dest => dest.Locality,
                    opt => opt.MapFrom(src => src.TWorker.Locality)
                ).ForMember(
                    dest => dest.WorkerCategoryKey,
                    opt => opt.MapFrom(src => src.TWorker.TrWorkerToWorkerCategory.Where(tr => tr.IsDefault == true).Select(cat => cat.WorkerCategoryKey))
                ).ForMember(
                    dest => dest.trWorkerToWorkerCategory,
                    opt => opt.MapFrom(src => src.TWorker.TrWorkerToWorkerCategory.Where(tr => tr.IsDefault == true))
                );


您的映射不起作用,因为无法简单地将集合映射。请选择cat=>cat.WorkerCategoryKey,将其映射到单个值dest.trworkerTowWorkerCategory。理解这一点的简单方法是手动执行类似的映射:

列表源=新列表{1,2,3}; int destination=源; 这没有任何意义,但本质上这就是您告诉AutoMapper如何处理WorkerCategoryKey的当前映射

话虽如此,说清楚你需要做什么并不容易,因为这取决于数据。但不管是什么,您都需要源为单个int。例如,如果源始终是同一WorkerCategoryKey的集合,则您可以从中获取第一项。选择cat=>cat.WorkerCategoryKey:

福门博先生 dest=>dest.WorkerCategoryKey, opt=>opt.MapFromsrc=>src.TWorker.trworkerTowWorkerCategory.Wheretr=>tr.IsDefault==true.Selectcat=>cat.WorkerCategoryKey.First
嗨@devNull我试过你的解决方案,但没用。无法将bool转换为int。@Mathlan89刚刚更新,应该是。Selectcat=>cat.WorkerCategoryKey.Firstfantastic,它可以工作,这正是我需要的:-非常感谢您的帮助!我已经接近解决方案,但我没有设定第一个:
.ForMember(
                    dest => dest.WorkerCategoryKey,
                    opt => opt.MapFrom(src => src.TWorker.TrWorkerToWorkerCategory.Where(tr => tr.IsDefault == true).Select(cat => cat.WorkerCategoryKey))