Je suis assez nouveau à LINQ et je me suis peut-être peint dans un coin ici. J'ai deux listes (gauche et droite) et je dois:Obtenir la différence entre deux listes basées sur certains champs
un) Obtenez des produits correspondant à la base de certains champs
b) Obtenir des éléments à gauche sans match sur le droit
c) Obtenez des articles sur le droit sans match sur la gauche
Un match se trouve si certains champs sont égaux. Les autres champs peuvent ou non contenir des valeurs mais ne doivent pas influencer la comparaison de correspondance.
Pour obtenir l'article un j'ai effectué une JOIN
sur les deux listes:
var q = from a in r1
from b in r2
where a.Prop1 == b.Prop1 && a.Prop3 == b.Prop3
select new { a.Prop1, a.Prop2, b.Prop3 };
Je ne sais pas où aller d'ici. I pense Je ne peux pas utiliser .Except()
parce que les autres propriétés pour les deux listes seront différentes et peuvent entraîner la rupture de la comparaison.
J'ai aussi essayé d'utiliser Left Join
et obtenir les articles sans matches:
var q =
from c in r1
join p in r2 on c.Prop1 equals p.Prop1
into cp
from p in cp.DefaultIfEmpty()
select new { Prop1 = c.Prop1, Prop2 = p == null ? "N/A" : p.Prop2 };
mais je trouve que vous ne pouvez pas comparer plus d'un champ à comparer.
Pouvez-vous avoir plus d'un champs sur un Left Join
avec LINQ? Existe-t-il d'autres moyens (outre LINQ) pour faire la différence entre deux listes?
Merci.J'ai utilisé un hybride vôtre et la solution de Cuong Le. Je ne savais pas qu'il y avait un 'Intersect' donc ça va me sauver le 'InnerJoin' – Devmonster
De rien, je suis heureux de vous aider. –