Средняя оценка с использованием двух представлений в Entity Framework и ASP.NET Core - PullRequest
0 голосов
/ 03 мая 2018

Я создал две модели, см. Ниже. Использовал каркас сущности объекта для создания контроллера и представлений.

На странице создания отзыва предоставляется возможность ввести отзыв int.

В моем представлении Healthprofessional, однако, я хотел бы отправить среднюю оценку каждому медицинскому работнику.

Я пробовал foreach утверждение в healthprofessional представление бритвы, однако в каждом представлении в бритве можно ссылаться только на одну модель, что затрудняет мне это.

@foreach (var item in Model.HealthReviews)
{
    // get error for this foreach when I try to apply
    // as item.Rating does not contain  
    // a public definition for getenumerator
    foreach (var rating in item.Rating)
    { }
}

Я думаю, что применение linq к контроллеру может быть ответом, но я потратил часы на этом этапе, пытаясь это сделать, и не слишком знаком с linq.

Любые предложения о том, как двигаться дальше с этой проблемой, я был бы очень признателен.

public enum Profession { Counsellor, Physio, Doctor }

public class HealthProfessional
{
    public int ID { get; set; }
    [Required]
    [StringLength(50)]
    [Display(Name = "Name")]
    public string Name { get; set; }
    public bool AcceptsMedicalCard { get; set; }
    [Required]
    [StringLength(80)]
    [Display(Name = "Address")]
    public string Address { get; set; }
    [Required]
    public Profession Profession { get; set; }
    public ICollection<Review> HealthReviews { get; set; }
    public ICollection<Client> Clients { get; set; }
}

public class Review
{
    public int ID { get; set; }
    public int? ClientID { get; set; }
    public int? HealthProfessionalID { get; set; }
    [Required]
    [Range(0, 5, ErrorMessage = "Please select number between 1 and 5")]
    public int Rating { get; set; }

    [Required]
    public string ReviewText { get; set; }
    public bool WouldRecommend { get; set; }
    public virtual Client Client { get; set; }
    public HealthProfessional HealthProfessional { get; set; }
}

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Вы можете добавить метод в класс HealthProfessional для расчета среднего рейтинга.

public class HealthProfessional
{
    public ICollection<Review> HealthReviews { get; set; }

    public double CalculateAverageRating()
    {
        return HealthReviews.Average(r => r.Rating);
    }
}

Затем вы вызываете метод в вашем методе действия Controller и назначаете его свойству модели представления.

0 голосов
/ 03 мая 2018

Вы уже перебираете HealthReviews, что является ICollection<Review>, и каждый Review содержит int Rating. Нет смысла пытаться зацикливаться на этом, это уже одно значение, которое вы можете использовать напрямую.

Ваш код должен выглядеть примерно так:

@{
    int sumOfRatings = 0;
    foreach (var item in Model.HealthReviews)
    {
        sumOfRatings += item.Rating;
        // ...
    }

    double averageRating = Model.HealthReviews.Count > 0
        ? (double)sumOfRatings / Model.HealthReviews.Count
        : 0;

    // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...