c# - 如何在 C# .NET CORE 中使用特定条件自动映射?
问题描述
我想在我的特定 DTO 中自动映射一个填充 workerCategory 键,但我不知道该怎么做。构建解决方案时我没有收到任何错误,但是当我调用 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))
);
我的问题在这里。我想选择workerCategoryKey(整数)并将其映射到WorkerCategoryKey。但它不起作用。
.ForMember(
dest => dest.WorkerCategoryKey,
opt => opt.MapFrom(src => src.TWorker.TrWorkerToWorkerCategory.Where(tr => tr.IsDefault == true).Select(cat => cat.WorkerCategoryKey))
解决方案
您的映射不起作用,因为您不能简单地将集合 ( .Select(cat => cat.WorkerCategoryKey)
) 映射到单个值 ( dest.trWorkerToWorkerCategory
)。理解这一点的一种简单方法是手动进行类似的映射:
List<int> source = new List<int> { 1, 2, 3 };
int destination = source;
这没有任何意义,但这本质上就是您要告诉 AutoMapper 对WorkerCategoryKey
.
话虽如此,要准确地说出您需要做什么并不容易,因为这取决于数据。但无论它是什么,您都需要源是一个单一的int
. 例如,如果源始终是相同的集合WorkerCategoryKey
,那么您可以从 获取第一项.Select(cat => cat.WorkerCategoryKey)
:
.ForMember(
dest => dest.WorkerCategoryKey,
opt => opt.MapFrom(src => src.TWorker.TrWorkerToWorkerCategory.Where(tr => tr.IsDefault == true).Select(cat => cat.WorkerCategoryKey).First())
推荐阅读
- firebase - Firebase 删除用户数据扩展是否能够删除已删除用户子集合中的所有文档?
- python - 如何解决图像文件上传,检查是否上传的天气,如果在 python 中上传成功问题,则显示一个弹出窗口?
- ios - 不确定将代码放在程序中的什么位置。如何在 XCode 中通过触摸生成圆圈。(目标-C)
- google-apps-script - 如何自动删除 Google 表格特定列中电话号码中的多余字符?
- javascript - ChartJS 缩放功能,如 ChartIQ
- node.js - 由于导入导出方法,模块未定义错误
- .net - 实体框架多对多导航到子,然后返回父
- python - 使用 Keras Tuner RandomSearch 错误进行超参数调优
- postgresql - Postgres 拒绝创建数据库 - 为什么?
- serenity-bdd - Serenity BDD 剧本登录示例