c# - AutoMapper Queryable Extension ProjectTo 子对象/属性扩展不起作用
问题描述
我是 AutoMapper 的新手,正在尝试使用 ProjectTo 扩展,但我想我错过了一些东西。
例如,我创建了一个简单的 AspNetCore 项目来进行测试。在 Startup.cs ConfigureServices 中配置 AutoMapper。
services.AddAutoMapper(this.GetType().Assembly);
我有这些模型类:
public class PersonDTO
{
public string Name { get; set; }
public string AddressStreetName { get; set; }
public string AddressStreetNumber { get; set; }
public string AddressCityName { get; set; }
}
public class Address
{
public string StreetName { get; set; }
public string StreetNumber { get; set; }
public string CityName { get; set; }
}
public class Person
{
public string Name { get; set; }
public Address Address { get; set; }
}
然后我还创建了这个配置文件:
public class PersonProfile : Profile
{
public PersonProfile()
{
CreateMap<Person, PersonDTO>().ReverseMap();
}
}
然后创建 DTO:
var personDTO = new PersonDTO()
{
Name = "John",
AddressStreetName = "TestStraat",
AddressStreetNumber = "10",
AddressCityName = "TestCity"
};
使用映射器非常有效:
var personFromPersonDTO = _mapper.Map<Person>(personDTO);
地址属性已设置。
使用 ProjectTo:
var list = new List<PersonDTO>();
list.Add(personDTO);
var listPersons = list
.AsQueryable()
.ProjectTo<Person>(_mapper.ConfigurationProvider, m=>m.Address)
.ToList();
该对象映射到新列表中,但 Address 属性为空。我在这里想念什么?
解决方案
使用时ProjectTo
,需要进行一些类型匹配。你可以参考这个例子。
public IActionResult Index()
{
var personDTO = new PersonDTO()
{
Name = "John",
AddressStreetName = "TestStraat",
AddressStreetNumber = "10",
AddressCityName = "TestCity"
};
var personFromPersonDTO = mapper.Map<Person>(personDTO);
var list = new List<PersonDTO>();
list.Add(personDTO);
//Configure mapping relationship
var configuration = new MapperConfiguration(cfg =>
cfg.CreateMap<PersonDTO, Person>()
.ForMember(p => p.Name, conf => conf.MapFrom(ol => ol.Name))
.ForMember(p => p.Address, conf => conf.MapFrom(o => new Address
{
CityName = o.AddressCityName,
StreetName = o.AddressStreetName,
StreetNumber = o.AddressStreetNumber
}))
);
var modelList=list.AsQueryable().ProjectTo<Person>(configuration);
return Ok(modelList);
}
它会得到结果。
推荐阅读
- java - 无法阻止 BufferReader 在控制台中接受输入
- docker - 带有 Elixir CircleCI 配置的纱线:找不到 package.json 文件
- c# - 如何在 .NET Core 中裁剪图像?
- python - “TypeError:join() 参数必须是 str 或 bytes,而不是 'NoneType'”,使用 Magpie+Tensorflow/Python3
- python - 两台电脑之间通过 ssh 传输文件
- c# - C# 列表集合在方法之外失去其价值
- arrays - 从 Select-String 中取出每一行的最后一个单词
- powerbi - 如何在 Power BI 自定义视觉对象中设置 Bing 地图?
- scala - 单列分隔字符串 rdd 到正确列的数据框
- rest - REST API 创建虚拟存储库