EF Core - Использование метода расширения внутри Где - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть следующий метод расширения для расчета средней оценки продукта.

public static class Extensions
{
    public static decimal CalculateAverageRating(this ICollection<ProductReview> productReviews)
    {
        // Calculate and return average rating

        return averageRatings;
    }
}

Я хочу использовать этот метод в запросе EF, например:

var products = _context.Products
            .Include(pr => pr.ProductReviews)
            .AsQueryable();

        if(searchParams.Rating != 0)
            products = products.Where(p => p.ProductReviews.CalculateAverageRating() == searchParams.Rating);

Однако я продолжаю нажимать на ошибку «ArgumentException: выражение типа 'System.Collections.Generic.IAsyncEnumerable 1[Products.Reviews.ProductReview]' cannot be used for parameter of type 'System.Collections.Generic.IEnumerable 1 [System.Object]' метода».

Можем ли мы использовать метод расширения в EF Where? Пожалуйста, посоветуйте мне это.

1 Ответ

0 голосов
/ 24 апреля 2019

нет проблем с методом расширения в EF.Ошибка о неправильном типе данных.Поэтому, пожалуйста, попробуйте этот способ

public static class Extensions
{
    public static decimal CalculateAverageRating(this IAsyncEnumerable<ProductReview> productReviews)
    {
        // Calculate and return average rating

        return averageRatings;
    }
}

var products = _context.Products
            .Include(pr => pr.ProductReviews)
            .AsQueryable().ToAsyncEnumerable();

        if(searchParams.Rating != 0)
            products = products.Where(p => p.ProductReviews.CalculateAverageRating() == searchParams.Rating);

PS: я не проверял код выше

...