在ASP.NET Core中使用ViewModel将数据传递到View

时间:2019-01-09 15:53:02

标签: asp.net-core ef-core-2.1

解决方案:

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.Datex.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; }

}

也许我要离开..?

1 个答案:

答案 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模型,但我已经假设了答案,因此根据您的实际数据和要求可能会有一些变化。