使用 LINQ 批量更新

Bulk update using LINQ

下面每次调用DB,通过id获取用户列表

foreach (User user in users)
{
    db.Users.Where(w => users.Any(a => a.Id == w.Id)).ToList().
     ForEach(x => {
         x.name = user.name;
         x.cat = user.cat;
         
      });                

}

db.SaveChanges();

有没有办法不用每次都进入循环来做到这一点。

先获取用户列表,更新它们,然后保存更改。你仍然需要一个 foreach 来更新它。这需要列表并仅选择 ID,将其转换为列表(或任何您的 ID 字段),然后从数据库中获取该列表中的所有用户,更新它们并保存。

var dbUserList = db.Users.Where(x => users.Select(y => y.Id).Contains(x.Id));
foreach (var user in users)
{
     var dbUser = dbUserList.First(x => x.Id == user.Id);
     dbUser.name = user.name;
     dbUser.cat = user.cat;
}
db.SaveChanges();