解决方案:
ParticipantsWithData = await _context.Participants.Select(p => new ParticipantWithData {
Participant = p,
Team = p.Teams,
FirstWeight = p.ParticipantData.Where(pd => pd.ParticipantId == p.Id).OrderBy(x => x.Date).FirstOrDefault(),
LastWeight = p.ParticipantData.Where(pd => pd.ParticipantId == p.Id).OrderByDescending(x => x.Date).FirstOrDefault()
}).ToListAsync();
然后是模型:
public class ParticipantWithData {
public Participant Participant { get; set; }
public Team Team { get; set; }
public ParticipantData FirstWeight { get; set; }
public ParticipantData LastWeight { get; set; }
}
这样,我可以在遍历参与者时执行x.FirstWeight.Date
或x.FirstWeight.Weight
(请参见下面的ParticipantData模型),
问题:
如何在我的视图中使用它?
var query = await _context.Participants.Select(p => new {
Participant = p,
Team = p.Teams,
FirstWeight = p.ParticipantData.OrderBy(x => x.Date).FirstOrDefault(),
LastWeight = p.ParticipantData.OrderByDescending(x => x.Date).FirstOrDefault()
}).ToListAsync();
如果可能,我想使其成为强类型模型,但我不知道该怎么做。到目前为止,我尝试过的所有方法均无效。
参与者模式:
public class Participant {
public Guid Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public Guid TeamId { get; set; }
[ForeignKey("TeamId")]
public Team Teams { get; set; }
public IList<ParticipantData> ParticipantData { get; set; }
}
ParticipantData模型:
public class ParticipantData {
public Guid Id { get; set; }
public double? Weight { get; set; }
public DateTime Date { get; set; }
public Guid ParticipantId { get; set; }
public Participant Participants { get; set; }
}
我正在研究的新模型:
public class ParticipantWithData {
public Participant Participant { get; set; }
public Team Team { get; set; }
public ParticipantData ParticipantData { get; set; }
public double? FirstWeight { get; set; }
public double? LastWeight { get; set; }
}
也许我要离开..?
答案 0 :(得分:0)
编写您的ParticipantViewModel
如下:
public class ParticipantViewModel
{
public Participant Participant { get; set; }
public Team Team { get; set; }
public double? FirstWeight { get; set; }
public double? LastWeight { get; set; }
}
然后在查询中:
var query = await _context.Participants.Inculde(p => p.Teams)
.Include(p => p.ParticipantData).Select(p => new ParticipantViewModel
{
Participant = p,
Team = p.Teams,
FirstWeight = p.ParticipantData.Select(pd => pd.Weight).OrderBy(x => x.Date).FirstOrDefault(),
LastWeight = p.ParticipantData.Select(pd => pd.Weight).OrderByDescending(x => x.Date).FirstOrDefault()
}).ToListAsync();
注意:我没有看到您的ParticipantData
模型,但我已经假设了答案,因此根据您的实际数据和要求可能会有一些变化。