AutoMapper Отображение значения из источника методом - PullRequest
1 голос
/ 06 апреля 2019

У меня есть 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());
            });
    }
...