Bonjour,
J'ai un problème à résoudre et je n'y arrive pas de manière simple et efficace. Voici mon problème:
J'ai 2 listes
ListA:
new MyClassA { ID = 123, Position = 1 },
new MyClassA { ID = 456, Position = 2 },
new MyClassA { ID = 789, Position = 3 },
new MyClassA { ID = 147, Position = 4 },
new MyClassA { ID = 658, Position = 5 }
ListB:
new MyClassB { ID = 123, Position = 1 },
new MyClassB { ID = 854, Position = 2 },
new MyClassB { ID = 789, Position = 3 },
new MyClassB { ID = 147, Position = 4 },
new MyClassB { ID = 456, Position = 5 }
Je souhaite que mon algo merge ces 2 listes en une seule liste My2ClassMerged de cette maniere
ListResult:
new My2ClassMerged { MyClassA, MyClassB}...
123 1 -> 123 1
456 2 -> NULL
NULL -> 854 2
789 3 -> 789 3
147 4 -> 147 4
658 5 -> NULL
NULL -> 456 5
L'idée c'est d'associé MyClassA avec MyClassB en se basant sur leur ID mais en veillant à garder leurs Positions dans l'ordre croissant dans la liste d'objet My2ClassMerged(en cas d'égalité des positions il n'y as pas d'ordre de priorité)
Ainsi dans mon exemple MyClassA avec l'ID 456 dans la listA que l'on retrouve dans la listB en Position 5 ne peuvent pas être associés car on aurai la liste de My2ClassMerged suivante: (Ce qui m'empeche d'utiliser un FULL JOIN par exemple)
ListResult:
new My2ClassMerged { MyClassA, MyClassB}...
123 1 -> 123 1
456 2 -> 456 5 (WRONG)
NULL p -> 854 2
789 3 -> 789 3
147 4 -> 147 4
658 5 -> NULL
J'ai tenter de résoudre ce probléme avec un while qui itere tour à tour sur les 2 lists et qui remplie la list result au fur et à mesure que des égalité d'ID sont detectées mais parfois le résultat n'est pas optimal
Partager