LINQ InvalidOperationException when calling ToList()



我想使用以下代码更新数据库中表中的记录:

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'.

我不确定我做错了什么,我将不胜感激任何帮助。

我认为问题是您要求SQL服务器对events执行.Any()操作,这可能是某种内存中的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);

我认为问题是EventDb.Guid == @event。无法将 Guid 转换为数据库原始 SQL。 吉德是什么类型? 看看如果将 ToList() 移到 Where 子句之前会发生什么。

最新更新