Передача данных в View с использованием ViewModel в ASP.NET Core - PullRequest
0 голосов
/ 09 января 2019

РЕШЕНИЕ:

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

}

Модель Данных Участника:

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 голосов
/ 09 января 2019

Напишите ваш 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 модель, но я ответил с предположением, поэтому могут быть некоторые изменения в соответствии с вашими фактическими данными и требованиями.

...