首页 > 解决方案 > 将表更新为非 IN 条件

问题描述

我有一个名为“attendeeList”的强类型列表,其中包含所有活动参与者:

   List<tb_Attendees> attendeeList

   public partial class tb_Attendees
   {
    public int AttendeeId { get; set; }
    public int MeetingId { get; set; }
    public string AttendeeName { get; set; }
    public bool IsActive { get; set; }
    .....

我需要更新下表:

    DataContext.tb_Attendees 

这样对于给定的 MeetingId,对于所有的 AttendeeIds 不在列表中,它会将这些记录更新为 IsActive = false。基本上我正在做一个NOT IN。

我想做一些事情:

 DataContext.tb_Attendees.Where(p => p.MeetingId == meetingId && !attendeeList.Contains(p => p.AttendId) ).ToList().ForEach(x => x.IsActive = false);
 DataContext.SaveChanges();

首先,这是正确的吗?我收到一条错误消息,提示无法从 int 转换为 Model.tb_Attendees。我是否需要将列表作为 int list 或任何方式来完成此操作。

标签: linq

解决方案


你很接近,但听起来你需要一个IDs列表,而不是与会者列表:

var attendeeIDList = attendeeList.Select(a => a.AttendId);

DataContext.tb_Attendees
           .Where(p => p.MeetingId == meetingId 
                    && !attendeeIDList.Contains(p => p.AttendId) )
           .ToList()
           .ForEach(x => x.IsActive = false);

我还要注意,这ForEach只是语法糖,在功能上等同于:

foreach(var x in
     DataContext.tb_Attendees
                .Where(p => p.MeetingId == meetingId 
                         && !attendeeIDList.Contains(p => p.AttendId) ))
{
    x.IsActive = false;
}

推荐阅读