AutoMapper:根据某些逻辑将目标 属性 映射到不同的源 property/type
AutoMapper : Map a destination property to a different source property/type based on some logic
我想将 Source 对象映射到 Destination 对象,该对象具有一些不直接等同于源属性的额外属性。考虑以下示例:
class Source { string ImageFilePath; }
class Destination { bool IsFileSelected; bool IsFileGif; }
IsFileGif 的映射逻辑:
destinationObj.IsFileGif = Path.GetExtension(sourceObj.ImageFilePath) == ".gif" ? true : false;
IsFileSelected 的映射逻辑:
destinationObj.IsFileSelected = string.IsNullOrEmpty(sourceObj.ImageFilePath) ? false : true;
此外,由于我的源是 IDataReader,我想知道如何将 IDataReader 对象的 field/column 映射到我的目标 属性。
我们能否使用内联代码实现此目的,还是必须为此使用值解析器?
您尝试过使用 MapFrom 方法吗?
Mapper.CreateMap<Source , Destination>()
.ForMember(dest => dest.IsFileGif, opt => opt.MapFrom(src => Path.GetExtension(sourceObj.ImageFilePath) == ".gif")
.ForMember(dest => dest.IsFileSelected, opt => opt.MapFrom(src => !string.IsNullOrEmpty(sourceObj.ImageFilePath));
关于 IDataReader,我认为您应该在 类(源到目标)之间进行映射,而不是从 IDataReader 到目标...
我找到了从 IDataReader 到 Destination 对象的映射:
Mapper.CreateMap<IDataReader, Destination>()
.ForMember(d => d.IsFileSelected,
o => o.MapFrom(s => !string.IsNullOrEmpty(s.GetValue(s.GetOrdinal("ImageFilePath")).ToString())))
.ForMember(d => d.IsFileGif,
o => o.MapFrom(s => Path.GetExtension(s.GetValue(s.GetOrdinal("ImageFilePath")).ToString()) == ".gif"));
如果有人验证此代码或建议是否存在更好的替代方案,我们将不胜感激。
我想将 Source 对象映射到 Destination 对象,该对象具有一些不直接等同于源属性的额外属性。考虑以下示例:
class Source { string ImageFilePath; }
class Destination { bool IsFileSelected; bool IsFileGif; }
IsFileGif 的映射逻辑:
destinationObj.IsFileGif = Path.GetExtension(sourceObj.ImageFilePath) == ".gif" ? true : false;
IsFileSelected 的映射逻辑:
destinationObj.IsFileSelected = string.IsNullOrEmpty(sourceObj.ImageFilePath) ? false : true;
此外,由于我的源是 IDataReader,我想知道如何将 IDataReader 对象的 field/column 映射到我的目标 属性。
我们能否使用内联代码实现此目的,还是必须为此使用值解析器?
您尝试过使用 MapFrom 方法吗?
Mapper.CreateMap<Source , Destination>()
.ForMember(dest => dest.IsFileGif, opt => opt.MapFrom(src => Path.GetExtension(sourceObj.ImageFilePath) == ".gif")
.ForMember(dest => dest.IsFileSelected, opt => opt.MapFrom(src => !string.IsNullOrEmpty(sourceObj.ImageFilePath));
关于 IDataReader,我认为您应该在 类(源到目标)之间进行映射,而不是从 IDataReader 到目标...
我找到了从 IDataReader 到 Destination 对象的映射:
Mapper.CreateMap<IDataReader, Destination>()
.ForMember(d => d.IsFileSelected,
o => o.MapFrom(s => !string.IsNullOrEmpty(s.GetValue(s.GetOrdinal("ImageFilePath")).ToString())))
.ForMember(d => d.IsFileGif,
o => o.MapFrom(s => Path.GetExtension(s.GetValue(s.GetOrdinal("ImageFilePath")).ToString()) == ".gif"));
如果有人验证此代码或建议是否存在更好的替代方案,我们将不胜感激。