我在 for 循环中调用了下面的
ExecuteUpdate
,我想知道是否可以消除 for 循环?我知道我可以在所有 UserId 的 where 子句中使用列表,但我不确定 SetProperty
foreach (var registrant in yogabandEvent.Registrants)
{
result = await _dbContext.Users
.Where(p => p.Id == registrant.UserId)
.ExecuteUpdateAsync(setters => setters
.SetProperty(p => p.Attended,
registrant.RegistrantType == RegistrantType.Student
? p => p.Attended + 1
: p => p.Attended));
}
我唯一想到的是:
var registrants = yogabandEvent.Registrants.ToDictionary(x => x.UserId, x => x);
var result = await _dbContext.Users
.Where(p => registrants.Keys.ToArray().Contains(p.Id))
.ExecuteUpdateAsync(setters => setters
.SetProperty(p => p.Attended,
registrants[p.Id].RegistrantType == RegistrantType.Student
? p => p.Attended + 1
: p => p.Attended));
或者,如果用户 ID 在
registrants
中不唯一,您始终可以只使用数组,但是如果无法通过 Id
进行索引,则更新部分将变得不那么漂亮。