将表更新为非IN条件

时间:2019-01-31 20:51:30

标签: linq

我有一个名为“ 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,对于不在列表中的所有AttendeeId,它将把这些记录更新为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一样具有该列表,或者需要任何方式来完成此操作。

1 个答案:

答案 0 :(得分:0)

您已经关闭,但是听起来您需要一个 ID 列表,而不是与会者列表:

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;
}