2009-06-18 9 views
2

Comment comparer les valeurs d'un jeu de données d'un autre.Comparer un ensemble de données ou une meilleure idée

1er jeu de données [ « dossiers appropriés »] est en provenance de SQL Server avec les noms de colonnes

[id], [subsNumber] 

2e jeu de données [ « approprié et inproper enregistrements »] provient de la base de données de progression, avec des colonnes sauf 1 qui est subsNumber

Comment puis-je créer un autre ensemble de données contenant tous les [subsNumber] de ["enregistrements corrects"] avec les enregistrements correspondants de 2nd datset ["enregistrements inproper appropriés"]?

ou

supprimer tous les enregistrements de 2e jeu de données [ « correcte et inproper dossiers »] qui ne correspondent pas à la colonne « subsNumber » dans le 1er jeu de données

ou toute autre idée

Comment puis-je obtenir tous les enregistrements du 2ème jeu de données qui a le même "subsNumber" que le 1er jeu de données

Répondre

3

La clé utilise System.Data.DataRelation pour joindre vos 2 données sur une ou plusieurs colonnes communes.

est ici un code dérivé d'un poste à KC's See Sharp Blog

public DataTable GetImproperRecords(DataTable ProperRecords, DataTable ImproperRecords) { 
    DataTable relatedTable = new DataTable("Difference"); 
    try { 
    using (DataSet dataSet = new DataSet()) { 
     dataSet.Tables.AddRange(new DataTable[] { ProperRecords.Copy(), ImproperRecords.Copy() }); 

     DataColumn properColumn = new DataColumn(); 
     properColumn = dataSet.Tables[0].Columns[1]; // Assuming subsNumber is at index 1 

     DataColumn improperColumn = new DataColumn(); 
     improperColumn = dataSet.Tables[1].Columns[0]; // Assuming subsNumber is at index 0 

     //Create DataRelation 
     DataRelation relation = new DataRelation(string.Empty, properColumn, improperColumn, false); 

     dataSet.Relations.Add(relation); 

     //Create columns for return relatedTable 
     for (int i = 0; i < ImproperRecords.Columns.Count; i++) { 
      relatedTable.Columns.Add(ImproperRecords.Columns[i].ColumnName, ImproperRecords.Columns[i].DataType); 
     } 

     relatedTable.BeginLoadData(); 

     foreach (DataRow parentrow in dataSet.Tables[1].Rows) { 
      DataRow[] childrows = parentrow.GetChildRows(relation); 

      if (childrows != null && childrows.Length > 0) 
       relatedTable.LoadDataRow(parentrow.ItemArray, true); 

     } 

     relatedTable.EndLoadData(); 

    } 
    } 
    catch (Exception ex) { 
    Console.WriteLine(ex.Message); 
    } 

    return relatedTable; 
} 
0

Pour obtenir tous les enregistrements du 2ème jeu de données qui correspondent aux enregistrements du 1er jeu de données serait quelque chose comme ceci:

IEnumerable list3 = liste2.Où (l2 => liste1.Contains (l1 => l1.subsNumber == l2.subsNumber));

Quelque chose dans ce sens!

1

Je résolu le problème:

1er jeu de données - throuhg boucle> et obtenir le subsNumber

fonction d'appel et passer subsNumber et 2nd dataset -> to it Puis commencer une autre boucle pour le nouveau jeu de données

Continuer si le sous-numéro ne correspond pas Si subsNumber travail de correspondance sur ces données comme ajouter des colonnes à table SQLServer etc.

code:

foreach (DataRow row in ecommDS.Tables["EcommData"].Rows) 
{   
    //string statCode = "" 
    string prdCode = ""; //declaring var for getting string format from ecomm 
    string checking = ""; 
    prdCode = row["PRD-CDE"].ToString(); 
    checking = row["SUBS-NUM"].ToString(); 

    if(checking != subsNum) 
    { 
     continue; 
    } 
Questions connexes