我可以通过 EF Core 中的 ExecuteUpdate 调用消除这个 for 循环吗?

问题描述 投票:0回答:1

我在 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));
}
c# .net linq entity-framework-core linq-to-entities
1个回答
0
投票

我唯一想到的是:

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
进行索引,则更新部分将变得不那么漂亮。

© www.soinside.com 2019 - 2024. All rights reserved.