IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linq Discussion :

Une façon simple de faire un add/update/delete sur une table


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 141
    Par défaut Une façon simple de faire un add/update/delete sur une table
    Bonjour,

    Je débute avec LINQ et comme LINQ me parrait facile à utiliser je me demandais s'il y avait une façon rapide et facile de faire un add/update/delete sur une table.
    Je m'explique.
    D'abord, je lis les records de ma table A.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public List<A> getAList()
            {
                using (DataLayerDataContext db = new DataLayerDataContext())
                {
                    var _a = from f in db.A select f;
                    return _a.ToList<A>();
                }
            }
    Je retourne ma List<> pour être utilisée par une application web qui va ajouter, supprimer ou updater des éléments de cette List.

    Me voici à vouloir coder ma méthode d'update.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void updateAList(List<A> _a)
            {
                using (DataLayerDataContext db = new DataLayerDataContext())
                {
                    ????            
                 }
            }
    Il a t'il une méthode facile et rapide de coder les ???

    Ou bien dois-je manuellement regarder tout ce qui est dans ma table et pas dans ma liste , le supprimer de ma table.
    Tout ce qui est dans ma liste et pas dans ma table l'ajouter dans ma table.
    Et tout ce qui est dans ma table et dans ma liste, le mettre à jour.

    ça me semble fastidieux .. des idées pour faire ça en 1/2 ligne de code

    merci

  2. #2
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Citation Envoyé par vilveq Voir le message
    Ou bien dois-je manuellement regarder tout ce qui est dans ma table et pas dans ma liste , le supprimer de ma table.
    Tout ce qui est dans ma liste et pas dans ma table l'ajouter dans ma table.
    Et tout ce qui est dans ma table et dans ma liste, le mettre à jour.
    Bah voilà, te reste plus qu'à le faire

    Après, tu peux faire ça de différentes manières, tu pourrais tenter un requêtage Linq utilisant comme source la table et la liste pour faire des jointures ou des différences, mais je ne sais pas si c'est réalisable.

    Sinon, une bonne vieille boucle for vient à bout de tout
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Par défaut
    Si ta fonction doit à la fois traiter les cas de figure INSERT et UPDATE, alors oui, une boucle sera le plus simple. Si tu souhaites seulement traiter un cas d'UPDATE (ou INSERT), une requête linq genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    using (DataLayerDataContext db = new DataLayerDataContext())
    {
       List<A> elemsToUpdate = db.A.Where(a => _a.Contains(a)).ToList()); //Convient de surcharger la méthode EqualsTo pour tester l'égalité, aussi possible de faire vac un 2e Where imbriqué :  db.A.Where(a => _a.Where(a2 => a2.Code == a.Code)).ToList()); (Code est un identifiant unique de ton bojet, permettant de le retrouver, et étant normalement un int, varchar ou guid :)
       foreach(A aToUp in elemsToUpdate )
       { ... }
    }
    Cela renverra les éléments à mettre à jour, il suffit de prendre le contraire de Contains pour avoir les éléments à mettre à jour.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 141
    Par défaut
    Merci pour vos réponse.

    Voilà ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    public void updateAList(List<A> _a)
            {
                using (DataLayerDataContext db = new DataLayerDataContext())
                {
    // je regarde si les records de ma table se trouve dans la List<>, sinon, je les supprime de la table.
                    var _itemList = from f in db.A select f;
                     foreach (var _item in _itemList)
                    {
                         if(_a.Count(p => p.id == item.id) == 0){
                            db.A.deleteOnSubmit(_item);
                         }
                     }
    // Et maintenant je regarde si le record se trouve dans la List et pas dans la table, je l'ajoute à la table
                      foreach(var _itemDeLaListe in _a){
                          if(db.A.Count(p => p.id == _itemDeLaListe.id) == 0){
                            A newA = new A();
                            newA.id = _itemDeLaListe.id;
                            db.A.insertOnSubmit(newA);
                          }
                      }
                 }
            }
     
    //puis il faut encore faire l'update
    je pense que je me complique la vie .. du à ma méconaissance de LINQ.
    Qu'en pensez-vous ?

  5. #5
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Déjà tu peux remplacer ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var _itemList = from f in db.A select f;
    par ça :

    En gros, pas besoin de faire un select *, fait une boucle directement sur la table.

    Ensuite, le count évite de faire une deuxième boucle, mais au niveau performance je ne sais pas lequel est le mieux.

    Mais sinon ça se tient

    N'oublie pas d'appeler la méthode SubmitChanges de ton DataContext à la fin.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. une question simple: comment faire un backup de le base?
    Par JeanNoel53 dans le forum Firebird
    Réponses: 16
    Dernier message: 13/03/2014, 13h31
  2. Evenement Insert,Update,Delete sur une table
    Par olibara dans le forum Développement
    Réponses: 7
    Dernier message: 20/11/2013, 16h28
  3. Votre avis sur une façon de faire
    Par Lyche dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 23/05/2008, 09h23
  4. Réponses: 8
    Dernier message: 29/08/2006, 14h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo