linq - 将表更新为非 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 或任何方式来完成此操作。
解决方案
你很接近,但听起来你需要一个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;
}