entity-framework - 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 查询。我错过了什么?任何帮助将不胜感激。谢谢你。
解决方案
尝试重写您的 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();
推荐阅读
- python - 如何在没有 if 语句的情况下找到 dict 中存在的键?
- database - 规范化生成一个没有明确目的的表
- scala - 如何将 df 列作为参数传递给函数?
- html - CSS input.submit 在移动设备中被否决
- c# - 如何知道何时停止并行 foreach,其中消费者也是 C# 中的生产者
- mysql - 获取兴趣与事件兴趣相匹配的用户
- json - 如何调用和使用从(API)到 Odoo 的 HTTP 请求和接收数据?
- reactjs - Post ID 路由显示在其他组件中
- javascript - 如何从网页中获取一段文本并使用 javascript/discord.js 将其分配给变量?
- python-3.x - AWS Lambda (Python) - 从 Internet 下载文件并直接上传到 AWS S3