投影 - 将两个属性映射为一个

Projection - mapping two properties into one

我正在尝试使用 Automapper 3.3.0 创建一个投影映射,它将我实体的两个属性映射到 DTO 中的一个 属性。

例如:

public class Entity
{
    public DateTime StartDate { get; set; }
    public DateTime StartTime { get; set; }
}

public class DTO
{
    public DateTime Start { get; set; }
}

所以我创建了一个这样的投影:

Mapper.CreateMap<Entity, DTO>()
.ForMember(
    d => d.Start, map => map.MapFrom(e => e.StartDate.Add(e.StartTime.TimeOfDay))
)

问题是,这个创建了一个针对我们的 MSSQL 数据库的查询,该数据库抛出一个 NotSupportedException,表明 LINQ to Entities 不知道方法 DateTime.Add().

我该如何解决这个问题?

EF 不知道如何处理这个,所以我会在目标类型上创建一个 属性 来进行计算:

public class Entity
{
    public DateTime StartDate { get; set; }
    public DateTime StartTime { get; set; }
}

public class DTO
{
    public DateTime StartDate { get; set; }
    public DateTime StartTime { get; set; }
    public DateTime Start { get { return StartDate.Add(StartTime.TimeOfDay); } }
}

我们已经设法通过创建一个假方法来解决这个问题,该方法 "calls" 我们数据库中的一个函数,因为这个函数被 LINQ to Entities 调用。