使用自动映射器将数字转换为 DateTime 对象
using automapper to convert a number to a DateTime object
我正在尝试使用自动映射器将以下值转换为实际的 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)));
在您的自动映射器中 .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
。
我正在尝试使用自动映射器将以下值转换为实际的 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)));
在您的自动映射器中 .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
。