Benutzer mit den meisten Antworten
LINQ ? Suche ROW aus Tabelle 1 in Tabelle 2

Frage
-
Hi,
suche nach einer Routine, die mir eine Zeileaus Tabelle 1 (10 Spalten) in der Tabelle 2 sucht (11 Spalten). Die SpaltenNamen sind immer unterschiedlich, aber in beiden tabellen gleich enthalten. Nur Tabelle 2 besitzt eine zusätzlich Spalte "_Id".
Habe etliches im Internet gefunden, aber nichts was irgendwie annähernd passt.
Gruß Hipp
Antworten
-
Hi,'
auch da kannst Du durch die erste Tabelle in der äßeren Schleife iterieren und dann in einer zweiten Schleife DataRow für DataRow in der zweiten Tabelle prüfen und in einer dritten eingebetteten Schleife Feld für Feld prüfen.Nachfolgend eine Demo:
using System; using System.Data; namespace ConsoleApplication1CS { class Program24 { static void Main(string[] args) { try { (new Demo()).Execute(); } catch (Exception ex) { var ex1 = ex; string msg = ""; while (ex1 != null) { msg += ex1.Message + Environment.NewLine; ex1 = ex1.InnerException; } Console.WriteLine(msg); } Console.Write("Fertig, Abschluss mit beliebiger Taste"); Console.ReadKey(); } class Demo { internal void Execute() { // tab1 DataTable tab1 = new DataTable(); tab1.Columns.Add("Spalte1", typeof(string)); tab1.Columns.Add("Spalte3", typeof(string)); tab1.Columns.Add("Spalte2", typeof(string)); // tab2 DataTable tab2 = new DataTable(); tab2.Columns.Add("Spalte1", typeof(string)); tab2.Columns.Add("Spalte2", typeof(string)); tab2.Columns.Add("Spalte3", typeof(string)); tab2.Columns.Add("ID", typeof(int)); // Sätze in tab1 tab1.Rows.Add("a", "b", "c"); tab1.Rows.Add("b", "c", "d"); tab1.Rows.Add("c", "d", "e"); // Sätze in tab2 tab2.Rows.Add("a", "b", "c", 1); tab2.Rows.Add("b", "c", "d", 2); tab2.Rows.Add("b", "d", "c", 3); tab2.Rows.Add("c", "d", "e", 4); // Vorbereitung zur schenleren Abfrage der Werte int[] map = new int[tab1.Columns.Count]; for (int i = 0; i < tab1.Columns.Count; i++) for (int k = 0; k < tab2.Columns.Count; k++) if (tab1.Columns[i].ColumnName == tab2.Columns[k].ColumnName) map[i] = k; // Prüfung for (int i = 0; i < tab1.Rows.Count; i++) for (int k = 0; k < tab2.Rows.Count; k++) { bool sw = true; for (int l = 0; l < tab1.Columns.Count; l++) sw = tab1.Rows[i].ItemArray[l].ToString() == tab2.Rows[k].ItemArray[map[l]].ToString() && sw; if (sw) Console.WriteLine($"gefunden in tab2, ID: {tab2.Rows[k]["ID"]}"); } } } } }
--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks
Kommas richtig setzen! Leben retten!
Wir essen Opa.
Wir essen, Opa.
- Bearbeitet Peter Fleischer Samstag, 20. August 2016 08:40
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 23. August 2016 09:01
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 2. September 2016 12:08
Alle Antworten
-
Hi,
von welchem Typ ist bei Dir eine Tabelle? Wenn es Array's sind, dann kannst Du einfach eine Schleife in einer Schleife ausführen und feldweise vergleichen.--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks
Kommas richtig setzen! Leben retten!
Wir essen Opa.
Wir essen, Opa. -
Hi,'
auch da kannst Du durch die erste Tabelle in der äßeren Schleife iterieren und dann in einer zweiten Schleife DataRow für DataRow in der zweiten Tabelle prüfen und in einer dritten eingebetteten Schleife Feld für Feld prüfen.Nachfolgend eine Demo:
using System; using System.Data; namespace ConsoleApplication1CS { class Program24 { static void Main(string[] args) { try { (new Demo()).Execute(); } catch (Exception ex) { var ex1 = ex; string msg = ""; while (ex1 != null) { msg += ex1.Message + Environment.NewLine; ex1 = ex1.InnerException; } Console.WriteLine(msg); } Console.Write("Fertig, Abschluss mit beliebiger Taste"); Console.ReadKey(); } class Demo { internal void Execute() { // tab1 DataTable tab1 = new DataTable(); tab1.Columns.Add("Spalte1", typeof(string)); tab1.Columns.Add("Spalte3", typeof(string)); tab1.Columns.Add("Spalte2", typeof(string)); // tab2 DataTable tab2 = new DataTable(); tab2.Columns.Add("Spalte1", typeof(string)); tab2.Columns.Add("Spalte2", typeof(string)); tab2.Columns.Add("Spalte3", typeof(string)); tab2.Columns.Add("ID", typeof(int)); // Sätze in tab1 tab1.Rows.Add("a", "b", "c"); tab1.Rows.Add("b", "c", "d"); tab1.Rows.Add("c", "d", "e"); // Sätze in tab2 tab2.Rows.Add("a", "b", "c", 1); tab2.Rows.Add("b", "c", "d", 2); tab2.Rows.Add("b", "d", "c", 3); tab2.Rows.Add("c", "d", "e", 4); // Vorbereitung zur schenleren Abfrage der Werte int[] map = new int[tab1.Columns.Count]; for (int i = 0; i < tab1.Columns.Count; i++) for (int k = 0; k < tab2.Columns.Count; k++) if (tab1.Columns[i].ColumnName == tab2.Columns[k].ColumnName) map[i] = k; // Prüfung for (int i = 0; i < tab1.Rows.Count; i++) for (int k = 0; k < tab2.Rows.Count; k++) { bool sw = true; for (int l = 0; l < tab1.Columns.Count; l++) sw = tab1.Rows[i].ItemArray[l].ToString() == tab2.Rows[k].ItemArray[map[l]].ToString() && sw; if (sw) Console.WriteLine($"gefunden in tab2, ID: {tab2.Rows[k]["ID"]}"); } } } } }
--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks
Kommas richtig setzen! Leben retten!
Wir essen Opa.
Wir essen, Opa.
- Bearbeitet Peter Fleischer Samstag, 20. August 2016 08:40
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 23. August 2016 09:01
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 2. September 2016 12:08