Utilisation de Util.Dif dans Linqpad

J'ai récemment dû comparer des objets de la même classe mais venant de deux sources de données différentes (DB Prod / Int, différents fichiers, etc.). Je ne voulais voir que les objets qui avaient une différence et si possible la détecter rapidement. Grâce à LINQPad j'avais tous les outils nécessaires et j'avais mon résultat en quelques minutes.

Voici un snippet vous montrant l'utilisation de la méthode Util.Dif:

void Main()
{
	var int_source = new List<Klass>
	{
		new Klass { Id = 1, First = "E", Last = "C" },
		new Klass { Id = 2, First = "J", Last = "C" },
		new Klass { Id = 3, First = "S", Last = "J" },
	};
	var prod_source = new List<Klass>
	{
		new Klass { Id = 1, First = "E", Last = "C" },
		new Klass { Id = 2, First = "J", Last = "C" },
		new Klass { Id = 3, First = "S", Last = "C" },
	};

	foreach (var element in prod_source.Zip(int_source, (f, s) => (f, s)))
	{
		if (!Util.Dif(element.f, element.s).IsSame)
		{
			Util.Dif(element.f, element.s).Dump("Full");
			Util.Dif(element.f, element.s, hideMatchingMembers: true).Dump("Only Diff");
		}
	}
}

// Define other methods and classes here
class Klass
{
	public int Id { get; set; }
	public string First { get; set; }
	public string Last { get; set; }
}

Cette méthode renvoie un objet IUtilDifResult qui contient une méthode IsSame pour tester l'égalité de deux objets. Petit plus, vous voyez que j'utilise la méthode Zip qui me permet d'avoir une approche Linq sans utiliser les boucles for du C.

Cette méthode Util.Dif permet également de comparer des objets imbriqués en contrôlant le niveau grâce au paramètre depth.

C'est simple, c'est rapide et c'est tout ce dont j'avais besoin. Job done!

Voici le résultat dans Linqpad:

Si vous aimez nos articles et voulez plus de tips sur LINQPad faites le savoir sur Twitter

Liens