我想使用以下代碼更新資料庫中表中的記錄:
context.Events
.Where(eventDb => !events.Any(@event => eventDb.Guid == @event.Guid))
.ToList()
.ForEach(eventDb => eventDb.IsCurrent = false);
但是每次呼叫 ToList() 我都會收到以下錯誤,我不清楚:
System.InvalidOperationException: The LINQ expression 'event => EntityShaperExpression:
WawAPI.Models.Event
ValueBufferExpression:
ProjectionBindingExpression: EmptyProjectionMember
IsNullable: False
.Guid == event.Guid' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'.
我不確定我做錯了什么,我會很感激任何幫助。
uj5u.com熱心網友回復:
我認為問題在于您要求 SQL 服務器執行一個.Any()操作,events該操作可能是某種記憶體中的 C# 物件,并且在 SQL 服務器上不存在并且太復雜而無法發送到 SQL。
如果您將 Guid 從events一個簡單的字串串列中提取出來,那么這可能很簡單,可以發送到 sql。您還需要稍微更改您的 linq 查詢,但我認為這將為您提供您正在尋找的結果。
var eventGuids = events.select(a=>a.Guid).ToList();
context.Events
.Where(eventDb => !eventGuids.Contains(event.Guid))
.ToList()
.ForEach(eventDb => eventDb.IsCurrent = false);
uj5u.com熱心網友回復:
我認為問題在于 EventDb.Guid == @event.Guid 無法轉換為資料庫原始 SQL。Guid 是什么型別的?看看如果將 ToList() 移到 Where 子句之前會發生什么。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/479520.html
上一篇:LINQ不評估空物件的檢查
