我試圖通過使用下面的運算式來獲取所有筆不是藍色的。有兩個串列鋼筆和藍筆...
var pensToDelete = _repository.GetPens().Where(x => bluePens.All(y => y.Id != x.Id));
當我訪問 pensToDelete 如下
if (pensToDelete .Count() > 0)
{
}
我收到以下錯誤:
System.InvalidOperationException:“無法翻譯 LINQ 運算式 'DbSet() .Where(a => __bluePens_0 .All(y => y.Id != a.Id))”。以可翻譯的形式重寫查詢,或通過插入對“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的呼叫顯式切換到客戶端評估。
不知道如何解決這個問題
uj5u.com熱心網友回復:
為了在 LINQ 中使用運算式,當您獲得它時,它必須可以轉換為底層提供程式,這可能是因為將運算式轉換為等價物InvalidOperationException失敗。LINQSQL Query
正如我們在評論中討論的那樣,當你想使用時要小心,總是嘗試在你的主查詢之后使用它,因為它很昂貴,并且在任何類似的ToList()事情之前檢索所有記錄。Where().Tolist()ToList().Where()
這個怎么樣:
var pensToDelete = _repository.GetPens()
.Where(x => !bluePens.Select(s => s.Id).Contains(x.Id));
uj5u.com熱心網友回復:
該問題可以很快得到解決,如錯誤訊息中所述,通過使用例如列舉結果:ToList。
這樣做的缺點是它將在記憶體中處理,而不是在您的 SQL 服務器中。
如果這是可以接受的,這就是如何做到的;
var pensToDelete = _repository.GetPens().ToList()
.Where(x => bluePens.All(y => y.Id != x.Id));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/456794.html
