![](/img/trans.png)
[英]EF Core 3 - Using an extension method of string inside Where clause
[英]EF Core - Using extension method inside Where
我有以下扩展方法来计算产品的平均评分。
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
' 的方法”。
我们可以在 EF Where 中使用扩展方法吗? 请就此给我建议。
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:我没有检查上面的代码
首先很抱歉来晚了...
但正如 Gert Arnold 所说,这一切都会在记忆中完成。 因此 EF 将获取内存中包含产品评论的整个产品表,这对性能来说可能是灾难性的。
您可能想要做的是(2 是更好的方法):
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.