投影包含的对象

Projecting included objects

我正在寻找一种方法来投影 EntityFramework 核心中包含的对象,我们可以投影对象(Select 函数):

[HttpGet]
    public async Task<IActionResult> GetBooks()
    {
        return Json(new { data = await _db.Books.Select(b => _mapper.Map<BookDto>(b)).ToListAsync() });
    }

这是我的代码,我在其中尝试投影包含的对象但它无效:

[HttpGet]
    public async Task<JsonResult> GetMessagesAsync()
    {
        var msgs = await _db.Messages.OrderBy(m => m.Sent).Include(m => _mapper.Map<AppUserDto>(m.AppUser)).ToListAsync();
        return Json(new { data = msgs });
    }

编辑1: 我想将包含的 AppUser 对象投影到 AppUserDto 中。

编辑 2:

public MappingProfile()
    {
        CreateMap<Book, BookDto>();
        CreateMap<BookDto, Book>();

        CreateMap<Client, ClientDto>();
        CreateMap<ClientDto, Client>();

        CreateMap<Reservation, ReservationDto>();
        CreateMap<ReservationDto, Reservation>();

        CreateMap<AppUser, AppUserDto>();
        CreateMap<AppUserDto, AppUser>();
    }

如果您的映射器设置正确,您应该能够执行以下操作:

var msgs = await _db.Messages
     .OrderBy(m => m.Sent)
     .Include(m => m.AppUser)
     .Select(m => _mapper.Map<MessageDto>(m))
     .ToListAsync();

因此您的 MessageDto 需要 AppUserDto AppUser 属性 等等。