我有員工表:
public class Employee
{
public int Id {get;set;}
public string FirstName {get;set;}
public string LastName {get;set;}
public int SupervisorId {get;set;}
}
SupervisorId 是來自同一個表 (Employee) 的指向其他員工的外鍵。
然后我有類似“EmployeeSupervisorDto”的東西
public class EmployeeSupervisorDto
{
public int Id {get;set;}
public string FirstName {get;set;}
public string LastName {get;set;}
public string FullNameSupervisor {get;set;}
}
我想要實作的是使用自動映射器將 FullNameSupervisor 自動設定為主管的名字和姓氏的組合。
到目前為止嘗試做這樣的事情:
cfg.CreateMap<Employee, EmployeeSupervisorDto>()
.ForMember(e => e.FullNameSupervisor, m => m.MapFrom(p => $"{p.LastName} {p.FirstName}"));
但我不知道如何參考 Id,該 Id 指出員工 ID,即給定員工的主管。
uj5u.com熱心網友回復:
要使用以下解決方案,您需要將資料背景關系注入自動映射器組態檔類(通過建構式引數),并且還在 ConfigureServices 中添加自動映射器組態檔的 DI,如https://stackoverflow.com所示/a/49198279/9907597。
在 AutoMapper 組態檔類中創建一個方法:
public string GetEmployerFullName(int supervisorEmpId) { var supervisor = db.Employees.Find(supervisorEmpId); return supervisor.FirstName " " supervisor.LastName; }然后在 automapper 組態檔類建構式中創建映射:
CreateMap<Employee, EmployeeSupervisorDto>() .ForMember(e => e.FullNameSupervisor, m => m.MapFrom(p => GetEmployerFullName(p.SupervisorId)));
uj5u.com熱心網友回復:
如果您想使用一次而不是一般使用,您可以使用ValueResolver或類似以下代碼的內容:
Mapper.CreateMap<Employee, EmployeeSupervisorDto>()
.ForMember(e => e.FullNameSupervisor, o => o.ResolveUsing(m => { return m.LastName m.FirstName}));
uj5u.com熱心網友回復:
可以幫助你,我嘗試使用 linq 方法:
public class Employee
{
public int Id {get;set;}
public string FirstName {get;set;}
public string LastName {get;set;}
public int SupervisorId {get;set;}
}
它為您提供具有 sup FullNameSupervisor 的員工串列
var Employeelist = new List<Employee>() {...};
var EmployeeWithSup = from ep in Employeelist
join epsup in Employeelist on ep.SupervisorId equals epsup.Id
select new { Id = ep.Id,FirstName = ep.FirstName,LastName = ep.LastName,
SupervisorId = ep.SupervisorId,FullNameSupervisor = epsup.FirstName " " epsup.LastName };
如果您想使用 automapper 進行連接,請嘗試以下鏈接: AutoMapper 將 2 個表中的記錄連接到單個 IEnumerable 視圖模型中
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/360033.html
