![](/img/trans.png)
[英]joining two tables using entity Framework core and asp.net core webapi
[英]Average rating using two views in Entity Framework & ASP.NET Core
我创建了两个模型,请参见下文。 使用实体框架支架来创建控制器和视图。
在“创建评论”页面中,提供了输入int
的评论的选项。
但是,在我的专业Healthprofessional
指数视图中,我想将平均评分发送给每个保健专业人员。
我已经尝试过在卫生专业剃刀视图中使用foreach
语句,但是在剃刀中的每个视图中只能引用一个模型,这对我来说很难。
@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; }
}
您已经遍历了作为ICollection<Review>
HealthReviews
,并且每个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;
// ...
}
您可以在HealthProfessional
类中添加一种方法来计算平均评分。
public class HealthProfessional
{
public ICollection<Review> HealthReviews { get; set; }
public double CalculateAverageRating()
{
return HealthReviews.Average(r => r.Rating);
}
}
然后,在Controller动作方法中调用该方法,并将其分配给视图模型的属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.