У меня есть ProductForReturnDTO
, который я хочу отобразить из Product
модели. В процессе сопоставления я хочу отобразить AverageRating
из метода с именем "CalculateAverageRating"
. Этот метод рассчитывает средний рейтинг на основе общего количества записей в коллекции ProductReview
.
Однако я получил ошибку:
«ICollection» не содержит определения «CalculateAverageRating» и недоступного метода расширения «CalculateAverageRating» »при попытке включить этот метод в отображение.
Может кто-нибудь посоветовать мне по этому поводу?
Модель продукта
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<ProductReview> ProductReviews { get; set; }
public Product()
{
ProductReviews = new Collection<ProductReview>();
}
}
ProductForReturnDTO
public class ProductForReturnDto
{
public int Id { get; set; }
public string Name { get; set; }
public int AverageRating { get; set; }
public ICollection<ProductReviewForReturnDto> ProductReviews { get; set; }
}
ProductReview Model
public class ProductReview
{
public int Id { get; set; }
public int Rating { get; set; }
public string Review { get; set; }
public Product Product { get; set; }
public int ProductId { get; set; }
}
CalculateAverageRating
public static class Extensions
{
public static int CalculateAverageRating(this ICollection<ProductReview> productReviews)
{
var totalReviews = productReviews.Count;
var totalRatings = productReviews.Sum(pr => pr.Rating);
var maxRatings = totalReviews * 5;
int averageRatings = (totalRatings / maxRatings) * 5;
return averageRatings;
}
}
Профиль Mapper
public ProductProfiles()
{
CreateMap<Product, ProductForReturnDto>()
.ForMember(dest => dest.AverageRating, opt => {
opt.MapFrom(d => d.ProductReviews.CalculateAverageRating());
});
}