使用Entity Framework Core,我想获得用户最近查看的10个作业的列表。
我正在研究一个包含User
,Job
和UserJobView
类的CRM。
public class User
{
public Guid Id { get; set; }
public string Name { get; set; }
}
public class Job
{
public Guid Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
}
public class UserJobView
{
public Guid Id { get; set; }
public Guid JobId { get; set; }
public Guid UserId { get; set; }
public DateTime LastViewedAt { get; set; }
public Job Job { get; set; }
}
我也有一个JobDto
,我计划使用AutoMapper
public class JobDto : IMapFrom<Job>
{
public Guid Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public DateTime? LastViewedAt { get; set; }
}
每次User
查看Job
时,我要么更新或创建一个UserJobView
对象,将LastViewedAt
属性设置为DateTime.Now
我可以使用以下流畅的查询获得最近查看的项目
return await _context.UserJobViews
.Where(x => x.UserId == thisUserId)
.OrderByDescending(x => x.LastViewed)
.Take(10)
.Select(x => x.Job)
.ProjectTo<JobDto>(_mapper.ConfigurationProvider)
.ToListAsync();
然而,这显然没有为JobDto
填充LastViewedAt
属性。我该怎么做呢?
只需在配置中添加一点内容,就可以实现:
CreateMap<UserJobView, JobDto>().IncludeMembers(s => s.Job);