首页 > 解决方案 > EF LINQ通过另一个列表中不存在的值获取记录列表

问题描述

所以,我有一个名为:

AppointmentsActivities

包含由...组成:

AppointmentID
ActivityID

我需要实现更新操作。由于它是一个联结表,因此更新不仅应该能够更新现有记录,还应该能够插入新记录,或者删除不再需要存在于表中的记录(因为我正在传递一个带有约会 ID 和ActivityID 的列表)。

我正在努力删除表中不再存在的记录。我必须删除具有相同 AppointmentId 的每条记录,但他的 ActivityID 不应出现在新活动列表中的任何对象中。

我写的查询是这样的:

var remove = _context.AppointmentsActivities.
Where(i => i.AppointmentID == entity.ID && entity.Activities.Any(u => u.ActivityID != i.ActivityID)).
ToList();

在哪里:

i => i.AppointmentID == entity.ID

检查新传递的实体的约会ID是否与数据库表中的相同。

和:

entity.Activities.Any(u => u.ActivityID != i.ActivityID)

应该检查活动列表中的任何活动ID 是否等于数据库表中的活动ID。

显然,我遗漏了一些东西,因为 EF 无法解析这个 LINQ 查询。我错过了什么?任何帮助将不胜感激。谢谢你。

标签: entity-frameworklinq

解决方案


尝试重写您的 LINQ 查询以使 EF 可以接受。Any使用本地集合将不起作用,因此替换为Contains

var activityIds = entity.Activities.Select(a => a.ActivityID).ToList();

var remove = _context.AppointmentsActivities
   .Where(i => i.AppointmentID == entity.ID && !activityIds.Contains(i.ActivityID))
   .ToList();

推荐阅读