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

C# Discussion :

comparer 2 datatables


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Par défaut comparer 2 datatables
    Bonjour,

    J'aimerais récupérer les lignes différentes de 2 datatables.
    Pour ce faire, je mets à true un tableau de boolean et à chaque fois que je trouve une égalité de datarow, je mets le boolean correspondant à false.
    Ensuite, je récupère le tableau de boolean et j'ajoute les datarows qui restent à true.
    voici le bout de code :

    Code C# : 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
    IEqualityComparer<DataRow> comparer = DataRowComparer.Default;
                    foreach (DataRow row1 in table1.Rows)
                    {
     
                        foreach (DataRow row2 in table2.Rows)
                        {
     
                            if (comparer.Equals(row1, row2))
                            {
     
                                found[curRow1] = false;    
     
                            }
     
                        }
                        curRow1++;
                    }
                    for (int i = 0; i < found.Length; i++)
                    {
                        if (found[i])
                        {
                            difference.Rows.Add(table1.Rows[i]);
                        }
     
                    }

  2. #2
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    et le probleme ??

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Par défaut Tableau de boolean à false
    Le problème est que les différences ne sont pas pris en compte
    j'ai deux datatables différentes avec la même structure mais le code met tout à false, arff

  4. #4
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
     if (!comparer.Equals(row1, row2))

    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
    26
     
    IEqualityComparer<DataRow> comparer = DataRowComparer.Default;
                    foreach (DataRow row1 in table1.Rows)
                    {
     
                        foreach (DataRow row2 in table2.Rows)
                        {
     
                            if (!comparer.Equals(row1, row2))
                            {
     
                                found[curRow1] = false;    
     
                            }
     
                        }
                        curRow1++;
                    }
                    for (int i = 0; i < found.Length; i++)
                    {
                        if (found[i])
                        {
                            difference.Rows.Add(table1.Rows[i]);
                        }
     
                    }

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 8
    Par défaut
    en mettant la condition not equal !comparer.Equals(row1, row2), dès la première différence de row, on met false.
    Or, je voudrais mettre à false toutes les rows égalent.
    Et récuperer les lignes laissées à true pour en faire un datatable : difference.

  6. #6
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    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
    26
    27
     
     
    IEqualityComparer<DataRow> comparer = DataRowComparer.Default;
                    foreach (DataRow row1 in table1.Rows)
                    {
     
                        foreach (DataRow row2 in table2.Rows)
                        {
     
                            if (!comparer.Equals(row1, row2))
                            {
     
                                found[curRow1] = false;    
     
                            }
                            curRow1++;
                        }
     
                    }
                    for (int i = 0; i < found.Length; i++)
                    {
                        if (found[i])
                        {
                            difference.Rows.Add(table1.Rows[i]);
                        }
     
                    }

Discussions similaires

  1. [C#]Changer le "compare" d'un DataTable
    Par anitshka dans le forum C#
    Réponses: 2
    Dernier message: 27/08/2010, 16h13
  2. Problème pour Comparer 2 Datatables et mise à jour
    Par Jean-Marc68 dans le forum C#
    Réponses: 4
    Dernier message: 21/11/2007, 19h28
  3. Réponses: 4
    Dernier message: 26/07/2007, 10h49
  4. [langage] Comparer Perl avec d'autres langages comme C ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2002, 23h52
  5. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 22h37

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