dedlfix: C# - 2 DataTable vergleichen

Beitrag lesen

Tach!

var l_modifiedRows = newData.Select()
                                         .Join(
                                            spData.Select(),
                                            r => r[keyColumnName],
                                            r => r[keyColumnName],
                                            (r1, r2) => new
                                            {
                                                Row1 = r1,
                                                Row2 = r2
                                            })
                                        .Where(
                                            values => !(values.Row1["Vorname"].Equals(values.Row2["Vorname"]) &&
                                                         values.Row1["Nachname"].Equals(values.Row2["Nachname"])))
                                        .Select(values => values.Row2);


>   
> Hier werden momentan die Spalten "Vorname" und "Nachname" auf Änderungen geprüft, was auch funktioniert.  
  
Statt .Equals() würde ich einfach == nehmen, beziehungsweise hier !=  
  

> Jetzt bekommt die Funktion ein Array übergeben das die Werte (Vorname, Nachname, Alter, Wohnort) beinhaltet. Dieses Array würde ich nun gerne durchlaufen und meine Where Bedingung damit dynamisch aufbauen anstatt "Vorname" und "Nachname" fest anzugeben. Ich weiß momentan aber leider nicht wie ich hier jetzt am besten vorgehe?  
  
Das heißt, die Werte im Array sind optional und damit auch die Länge der Where-Klausel. Zum einen gibt es "Dynamic Linq", mit dem man die Klausel als String übergeben kann. Dann ist das nur eine Frage der Stringverarbeitung. Zum anderen kannst du den Expression-Tree auch zu Fuß zusammen bauen, was einigermaßen aufwendig ist.  
  
Ich würde versuchen, die Where-Klauseln einzeln anzuhängen. Zunächst machst du nach dem Join() Schluss und legst das bisherige Ergebnis in einer Variable ab. Je nach Wert im Array hängst du daran jeweils ein Where() an, und anschließend das Select(). Damit sind die Bedingungen aber and-verknüpft. Wenn du or brauchst, dann nimm die Expression-Tree-Methode. Mit den genannten Stichwörtern findest du sicherlich weiteres Material.  
  
  
dedlfix.