【问题标题】:EF LINQ Get list of records by values not existing in another listEF LINQ通过另一个列表中不存在的值获取记录列表
【发布时间】:2021-04-26 15:57:22
【问题描述】:

所以,我有一个名为:

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-framework linq


    【解决方案1】:

    尝试重写您的 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-21
      • 2011-09-13
      • 2017-10-21
      • 2017-04-28
      • 1970-01-01
      • 2011-10-13
      • 2014-03-23
      • 2020-11-22
      相关资源
      最近更新 更多