Question

J'ai besoin de mettre à jour toutes les lignes de ma table lorsque l'utilisateur visite une page spécifique. Tous les champs doivent être mis à jour à « false ». J'ai essayé ce code:

var history = db.UserHistory.Where(m => m.UserID == id);
TryUpdateModel(history);
history.IsActive = false;
db.SaveChanges();

Mais il me lance un message d'erreur. Quelqu'un pourrait me aider à cette mise à jour?

Était-ce utile?

La solution

Je ne pouvais pas obtenir d'abord que LINQ n `mise à jour plusieurs lignes à la fois, je dois faire une boucle et mettre à jour chacun. Mon code final est celui-ci:

var history = db.UserHistory.Where(m => m.UserID == id).ToList();
TryUpdateModel(history);
history.ForEach(m => m.IsActive = false);
db.SaveChanges();

Autres conseils

Comme il semble que vous êtes juste sélectionner une seule entrée que vous voulez voulez probablement ajouter .FirstOrDefault () à votre première ligne, ce qui devrait apparaître avec IntelliSense.

var history = db.UserHistory.Where(m => m.UserID == id).FirstOrDefault();
TryUpdateModel(history);
history.IsActive = false;
db.SaveChanges();

En ce moment, vous retournez un IQueryable par opposition à une seule entrée. FirstOrDefault retournera une seule entité UserHistory, donc au moins vous seriez passer un seul élément à TryUpdateModel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top