亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

EF Core - 在 Where 中使用擴展方法

EF Core - 在 Where 中使用擴展方法

C#
叮當貓咪 2022-12-24 15:04:42
我有以下擴展方法來計算產品的平均評分。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.IEnumerable1 [System.Object]'的表達式”。我們可以在 EF Where 中使用擴展方法嗎?請就此給我建議。
查看完整描述

2 回答

?
回首憶惘然

TA貢獻1847條經驗 獲得超11個贊

首先很抱歉來晚了...

但正如 Gert Arnold 所說,這一切都會在記憶中完成。因此 EF 將獲取內存中包含產品評論的整個產品表,這對性能來說可能是災難性的。

您可能想要做的是(2 是更好的方法):

  1. 如果您真的想繼續使用您的擴展方法,請將產品和產品評論中所需的屬性投影到虛擬機中,然后進行過濾。

  2. 只需使用 sql 為您提供的平均方法


查看完整回答
反對 回復 2022-12-24
?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

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:我沒有檢查上面的代碼


查看完整回答
反對 回復 2022-12-24
  • 2 回答
  • 0 關注
  • 213 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號