verwendetes Datenbanksystem: LINQ
Hallo,
ich habe 2 CSV Tabellen.
csv1.csv
csv2.csv
csv1 ist wesentlich kleiner(hat weniger Zeilen aber gleiche Spalten) als csv2.csv und ich möchte ermitteln, welche Zeilen von csv1.csv mindestens 2 gleiche Werte in den Spalten haben, wie csv2.csv
string[] allLines = File.ReadAllLines(csvfilename);
var query = from line in allLines
let data = line.Split(';')
select new
{
eci = data[0],
email = data[1],
plz = data[2],
ort = data[3],
vorname = data[4]
};
So lese ich aktuell ein CSV ein, nun würde ich das gern verknüpfen, in einen LINQ Request.
d.h. wenn zB email, plz und ort gleich sind, dann gibt er das wieder zurück.
Wie mache ich das am effizientesten?
Das Original hat 13 Spalten, aus Gründen der Übersichtlichkeit, habe ich gekürzt.
Grüsse,
Unsere Website
iPhone Programmierung | Android Programmierung
Simpel: Eigene Methode, die zwei Zeilen vergleicht.
Es wird jede Spalte einzeln miteinander vergleichen und bei Gleichheit ein Int-Wert um 1 erhöht.
Sollte der Counter Deinen Ansprüchen übertreffen wird ein True oder eben die Anzahl zurück gegeben. Danach kannst Du weiter vorgehen.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo,
du kannst auch Intersect in Verbindung mit einem IEqualityComparer verwenden.
class Program
{
static void Main(string[] args)
{
//Simuliert die CSV-Zeilen der beiden Dateien
List<string[]> lines1 = new List<string[]> { new string[] { "1", "2", "3" }, new string[] { "2", "3", "4" } };
List<string[]> lines2 = new List<string[]> { new string[] { "1", "2", "3" }, new string[] { "2", "3", "5" } };
List<string[]> result = lines1.Intersect(lines2,new MyComparer()).ToList();
Console.WriteLine(result.Count);
Console.ReadLine();
}
}
//Die beiden Methoden müsstest du eben konform ausprogrammieren
class MyComparer : IEqualityComparer<string[]>
{
public bool Equals(string[] x, string[] y)
{
if (x.Length != y.Length)
return false;
return x[0] == y[0];
}
public int GetHashCode(string[] obj)
{
return obj[0].GetHashCode();
}
}
mfg
Serial