![](/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.