我尝试使用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)));
答案 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
。