Here is another way to find differences between CSV files, using Cinchoo ETL - an open source library
For the below sample CSV files
sample1.csv
id,name 1,Tom 2,Mark 3,Angie
sample2.csv
id,name 1,Tom 2,Mark 4,Lu
METHOD 1:
Using Cinchoo ETL, below code shows how to find differences between rows by all columns
var input1 = new ChoCSVReader("sample1.csv").WithFirstLineHeader().ToArray(); var input2 = new ChoCSVReader("sample2.csv").WithFirstLineHeader().ToArray(); using (var output = new ChoCSVWriter("sampleDiff.csv").WithFirstLineHeader()) { output.Write(input1.OfType<ChoDynamicObject>().Except(input2.OfType<ChoDynamicObject>(), ChoDynamicObjectEqualityComparer.Default)); output.Write(input2.OfType<ChoDynamicObject>().Except(input1.OfType<ChoDynamicObject>(), ChoDynamicObjectEqualityComparer.Default)); }
sampleDiff.csv
id,name 3,Angie 4,Lu
Sample fiddle: https://dotnetfiddle.net/nwLeJ2
METHOD 2:
If you want to do the differences by id column,
var input1 = new ChoCSVReader("sample1.csv").WithFirstLineHeader().ToArray(); var input2 = new ChoCSVReader("sample2.csv").WithFirstLineHeader().ToArray(); using (var output = new ChoCSVWriter("sampleDiff.csv").WithFirstLineHeader()) { output.Write(input1.OfType<ChoDynamicObject>().Except(input2.OfType<ChoDynamicObject>(), new ChoDynamicObjectEqualityComparer(new string[] { "id" }))); output.Write(input2.OfType<ChoDynamicObject>().Except(input1.OfType<ChoDynamicObject>(), new ChoDynamicObjectEqualityComparer(new string[] { "id" }))); }
Sample fiddle: https://dotnetfiddle.net/t6mmJW
ifblocks in your code. Changing the condition solves this issue.1,Pete,2equal to1,"Pete",2?