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

时间:2015-01-20 16:03:05

标签: c# entity-framework linq-to-entities automapper

我尝试使用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()

如何解决此问题?

2 个答案:

答案 0 :(得分:0)

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); } }
}

答案 1 :(得分:0)

我们设法通过创建一个“调用”我们数据库中的函数的假方法来解决这个问题,因为LINQ to Entities调用了这个函数。