我有以下扩展方法来计算产品的平均评分。
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中使用扩展方法吗?请给我建议。
答案 0 :(得分: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:我尚未检查以上代码
答案 1 :(得分:0)
首先对参加聚会晚点感到抱歉...
但是就像Gert Arnold所说的那样,这一切都将在内存中完成。 因此,EF会通过产品评论在内存中获取整个产品表,这可能会对性能造成灾难性的影响。
您可能想做的是(2是更好的方法):