使用循环和 If 语句 C# 从列表中删除对象

Remove Object From List With Loop and If Statement C#

我有一个 DTO:

public class UserDTO 
{
  public int uid {get;set;} 
  public string name {get;set;} 
}
// example of what the udto gets as a request from the front-end
var theList = new List<UserDTO>()
{
  new UserDTO { uid = 1, name = "Bob Smith" },
  new UserDTO { uid = 2, name = "Jane Jones" },
};

在数据库中:Bob 的状态为 0,而 Janes 在数据库中不存在。因此循环检查用户是否存在状态为 0,如果存在,则使用 _myCtx.Update() 将数据库状态从 0 更新为 1。然后一旦更新,它会删除 Bob 的对象,因为我不想复制 Bob,因为他已经存在,我需要删除 Bobs 对象,然后继续下一个循环,它将 Jane 添加到数据库中。

public async Task<IActionResult> AddUser([FromBody] List<UserDTO> udto)
{
  var toRemove = new HashSet<UserDTO>();
  foreach(var item in udto)
  {
    var userFalse = await _myCtx.Users.SingleOrDefaultAsync(o => o.uid == item.uid && o.status == 0);
    if(userFalse != null) // if user found, I want to update
    {
      item.Status = 1;
      _myCtx.Users.Update(userFalse); 
      await _myCtx.SaveChanges(); //save into the DB the status to 1
      if(item.uid == userFalse.uid){ toRemove.Add(item); } //need Bob removed here
    } // below I want to add if they don't exist
    udto.RemoveAll(toRemove.Contains);
    item.name = udto.name;
    var myEntity = _mapper.Map(item);
    await _myCtx.Users.AddAsync(myEntity);
    // Jane gets added, but so does Bob as a duplicate
  }
  await _myCtx.SaveChangesAsync();
  return Ok("User Added");
}

项目在循环完成后被删除,以及将其添加到数据库的原因。有没有办法在 Bob 在 if 子句之后或内部继续之前删除它,这样它就不会被添加到数据库中?谢谢大家

您的代码似乎在迭代集合时正在修改集合。这不可能发生。

虽然您可以轻松删除循环。

在我看来,您正在尝试这样做:

var uids = udto.Select(x => x.uid).ToArray();

var users =
    _myCtx
        .Users
        .Where(x => x.status == 0)
        .Where(x => uids.Contains(x.uid))
        .ToArray();
        
foreach (var user in users)
{
    user.status = 1;
}

await _myCtx.SaveChanges();

var uids2 = users.Select(x => x.uid).ToArray();

udto.RemoveAll(x => uids2.Contains(x.uid));