Around and About .NET World

Il blog di Marco Minerva
posts - 1671, comments - 2232, trackbacks - 2135

My Links

News

Contattami su Live Messenger:


MCTS: Windows, Web, Distributed Applications & SQL Server

MCPD: Enterprise Applications

Tag Cloud

Archives

Post Categories

Links

Effettuare il Join di due DataTable

Qualche giorno fa ho avuto la necessità di effettuare il join di due DataTable, risultato di interrogazioni su due database differenti, per produrre un unico DataTable da mostrare in un controllo DataGridView. Le due tabelle dovevano essere unite sulla base di un campo ID, secondo l'usuale relazione di chiave-chiave esterna. Mi sono così definito una procedura per eseguire l'operazione:

private void Join(DataTable mainTable, string mainRowField, string parentRowField, DataRelation relation) { //Controlla se la tabella contiene la colonna in cui aggiungere i risultati del join. if (!mainTable.Columns.Contains(mainRowField)) mainTable.Columns.Add(mainRowField); foreach (DataRow row in mainTable.Rows) row[mainRowField] = row.GetParentRow(relation)[parentRowField].ToString(); }

Il suo utilizzo è molto semplice. Supponiamo di avere le seguenti DataTable:

DataTable dt1 = new DataTable(); dt1.Columns.Add("NomeUtente"); dt1.Columns.Add("IDCitta"); dt1.Rows.Add(new object[] { "Marco", 12 }); dt1.Rows.Add(new object[] { "Andrea", 12 }); dt1.Rows.Add(new object[] { "Pippo", 13 }); DataTable dt2 = new DataTable(); dt2.Columns.Add("NomeCitta"); dt2.Columns.Add("IDCitta"); dt2.Rows.Add(new object[] { "Taggia", 12 }); dt2.Rows.Add(new object[] { "Sanremo", 13 }); dt2.Rows.Add(new object[] { "Poggibonsi", 14 });

Come è facile intuire, esse dovrebbero essere unite sulla base del valore del campo IDCitta. La prima cosa da fare è inserire queste tabelle in un DataSet e definire una DataRelation tra di esse:

DataSet ds = new DataSet(); ds.Tables.AddRange(new DataTable[] { dt1, dt2 }); ds.Relations.Add("Origine", dt2.Columns["IDCitta"], dt1.Columns["IDCitta"], false);

La relazione è tra la chiave primaria IDCitta di dt2 e la chiave esterna IDCitta in dt1. A questo punto si può finalmente richiamare il metodo Join:

Join(dt1, "Citta", "NomeCitta", ds.Relations[0]);

Dove:

  • dt1 è la tabella che si vuole "arricchire" con la giunzione;
  • Citta è il nome della colonna di dt1 in cui si vuole aggiungere il risultato della giunzione (se non esiste, verrà creata automaticamente);
  • NomeCitta è il campo della tabella in giunzione i cui valori verranno copiati nella colonna Citta della prima tabella;
  • ds.Relations[0] è il riferimento alla DataRelation da utilizzare per trovare i record in giunzione.

Tutto qui Smile

Technorati Tag: ,,,

Print | posted on Saturday, December 29, 2007 4:02 PM | Filed Under [ C# ADO .NET & SQL ]

Feedback

Gravatar

# re: Effettuare il Join di due DataTable

grazie mille!
La miglior soluzione a quello che mi serviva!
7/28/2009 4:37 PM | myro
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET