EF Core - 在Where里面使用扩展方法

问题描述 投票:0回答:1

我有以下扩展方法来计算产品的平均评级。

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.IAsyncEnumerable1[Products.Reviews.ProductReview]' cannot be used for parameter of type 'System.Collections.Generic.IEnumerable1 [System.Object]'方法”。

我们可以在EF中使用扩展方法吗?请就此向我提出建议。

c# sql entity-framework .net-core ef-core-2.0
1个回答
0
投票

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:我没有检查上面的代码

© www.soinside.com 2019 - 2024. All rights reserved.