Я хотел бы обновить атрибут в списке объектов. Этот атрибут происходит из списка aspnetUsers
Это объект
Object
{
public Guid Id { get; set; }
public string profesionalId{ get; set; }
public string attributeToUpdate { get; set; }
}
У меня есть этот код, который не работает
List<Object> MyListOfObject=new List<Object>();
// do some queries to populate the list
// more things here...
//my first problem comes here, can not get the list of users
var listOfUsers= _dbContext.Users.Where(u => MyListOfObject.Any(id => id.ProfesionalId == u.Id)).ToList();
Если приведенный выше код работает, я хотел бы сделать
MyListOfObject.ForEach(
//here replace the MyListOfObject.attributeToUpdate
).where (MyListOfObject.profesionalId==listOfUsers.Id)
Могу ли я получить решение для этого, пожалуйста? Я старался изо всех сил, но не смог решить эту проблему. Спасибо.
спасибо за быстрый ответ, да... моя проблема в том, что я не могу изменить атрибут внутри foreach
Ах, я не видел, чтобы вы уже использовали его. Вы бы сделали MyListOfObject.ForEach(o => o.attributeToUpdate = newValue), но если newValue не может быть вычислено один раз или нуждается в каком-то индексаторе, не расстраивайтесь из-за необходимости использовать традиционный цикл for.
проблема в том, что новое значение исходит из списка пользователей aspnet, и проблема в том, как обновить, где user.id = mylistOfObject.profesionalId
Если вы не можете найти ответ с помощью LINQ, честно говоря, не чувствуйте себя побежденным, если вы используете цикл for с if внутри :)
спасибо, я просто хотел быть более эффективным. :)





для построения списка:
var listOfUsers= _dbContext.Users.Where(u => MyListOfObject.Select(c=>c.ProfesionalId).ToList().Contains(u.id)).ToList();
но в целом вы должны быть в состоянии сделать так:
MyListOfObject.ForEach(l => l.PropertyToUpdate= _dbContext.Users.First(x => x.id == l.ProfessionalId).PropertyYouGetDataFrom);
большое спасибо. Это было действительно полезно. Можем ли мы использовать await _dbContext?
@evvk, я считаю, что перечисления выполняются синхронно
Такие операции, как Where и Select, разработаны специально для нет изменения исходной коллекции. Однако, поскольку вы используете список, вы можете использовать
List<T>.ForEach(T => /*do something with T*/)