103 votes

comment mettre à jour les lignes multiples à la fois en utilisant linq à sql ?

Tableau :

id     userid  friendid   name    status
1      1        2         venkat  false
2      1        3         sai     true
3      1        4         arun    false
4      1        5         arjun   false

Si un utilisateur envoie userid=1,friendids=2,4,5 status=true

Comment écrirais-je la requête pour mettre à jour ce qui précède ? Tout le statut friendids est vrai. [2,3,4 à la fois] ?

26voto

Jacob Points 1410

N'utilisez pas la méthode ToList() comme dans la réponse acceptée !

En exécutant SQL profiler, j'ai vérifié et trouvé que la fonction ToList() récupère tous les enregistrements de la base de données. C'est vraiment une mauvaise performance ! !

J'aurais exécuté cette requête par commande sql pure comme suit :

string query = "Update YourTable Set ... Where ...";    
context.Database.ExecuteSqlCommandAsync(query, new SqlParameter("@ColumnY", value1), new SqlParameter("@ColumnZ", value2));

Cela ferait fonctionner la mise à jour en une seule fois sans même sélectionner une ligne.

4voto

stom Points 2477

Voilà ce que j'ai fait :

EF :

using (var context = new SomeDBContext())
{
    foreach (var item in model.ShopItems)  // ShopItems is a posted list with values 
    {    
        var feature = context.Shop
                             .Where(h => h.ShopID == 123 && h.Type == item.Type).ToList();

        feature.ForEach(a => a.SortOrder = item.SortOrder);
    }

    context.SaveChanges();
}

Hope aide quelqu'un.

Note : 5 ans plus tard, comme indiqué dans les commentaires c'est pas une bonne option parce que je fais des appels DB pour obtenir des données foreach. Si vous ne faites pas la même chose, alors son ok à utiliser.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X