Trova elementi da una lista che esiste in un’altra lista

Ho una List

 PropA { int a; int b; } 

e un’altra List

 PropX { int a; int b; } 

Ora devo trovare gli elementi da List che esistono in List corrispondono alla proprietà b usando lambda o LINQ.

Quello che vuoi fare è Join le due sequenze. LINQ ha un operatore Join che fa esattamente questo:

 List first; List second; var query = from firstItem in first join secondItem in second on firstItem.b equals secondItem.b select firstItem; 

Si noti che l’operatore Join in LINQ viene anche scritto per eseguire questa operazione in modo un po ‘più efficiente rispetto alle implementazioni ingenue che farebbero una ricerca lineare attraverso la seconda raccolta per ciascun elemento.

 ListA.Where(a => ListX.Any(x => xb == ab)) 
 var commonNumbers = first.Intersect(second); 

Questo ti darà i valori comuni tra due liste, approccio molto più veloce e più pulito quindi join o altre espressioni Lambda.

Provalo.

Fonte: MSDN

Beh, quanto sopra non funzionerà se hai più parametri, quindi penso che questo sia il modo migliore per farlo.

Ad esempio: Trova oggetti non abbinati da animali domestici e animali domestici2.

 var notMatchedpets = pets .Where(p2 => !pets2 .Any(p1 => p1.Name == p2.Name && p1.age == p2.age)) .ToList();