使用automapper将数字转换为DateTime对象

时间:2016-04-08 09:17:35

标签: c# automapper

我尝试使用automapper将以下值转换为实际的DateTime对象。我没有得到这个工作,有什么我做错了吗?任何帮助非常感谢

示例值

201503
201504
201505

下面显示的对象

class DataObject 
{ 
    public int DateTime { get; set; }
}

class DomainObject
{
    public DateTime DateTime { get; set; }
}

到目前为止尝试使用AutoMapper

_mapperConfiguration = new MapperConfiguration(c => {
            c.CreateMap<DataObject, DomainObject>()
                .ForMember(dest => dest.DateTime, opt => opt.MapFrom(src => new DateTime(dest.SubString(0,4), dest.SubString(5,2), 1);
        });

编译错误

compiler error actually, I get the following Severity   Code    Description Project File    Line    Suppression State Error CS0103  The name 'dest' does not exist in the current context..

第二次尝试

.ForMember(dest => dest.DateTime, opt => opt.MapFrom(src => new DateTime(src.Date.ToString().SubString(0, 4), src.Date.ToString().SubString(5, 2), 1)));

第三次尝试

.ForMember(dest => dest.DateTime, opt => opt.MapFrom(src => new DateTime(Convert.ToInt32(src.Date.ToString().Substring(0, 4)), Convert.ToInt32(src.Date.ToString().Substring(5, 2)), 1)));

解决方案

不幸的是,我收到了不好的数据,这是潜在的问题,尽管有效的自动收集器代码如下所示,用于关闭。

.ForMember(dest => dest.DateTime, dest => dest.MapFrom(src => DateTime.ParseExact(src.DateTime.ToString(), "yyyyMM", CultureInfo.InvariantCulture)));

1 个答案:

答案 0 :(得分:3)

在您的自动播放器.ForMember电话中:

.ForMember(dest => dest.DateTime, 
           opt => opt.MapFrom(src => new DateTime(dest.SubString(0,4), dest.SubString(5,2), 1);

你传递了两个lambda表达式。但是在第二个中使用第一个lambda中的参数。但lambda参数的范围限定为定义它们的lambda。 (您可以关闭外部作用域中的变量,但这些是兄弟作用域,因此不适用)。

我怀疑你需要在第二个lambda中使用src而不是dest