Remove items from list 1 not in list 2

Solution for objects (maybe easier than horaces solution):

If your list contains objects, rather than scalars, it is that simple, by removing by one selected property of the objects:

    var a = allActivePatientContracts.RemoveAll(x => !allPatients.Select(y => y.Id).Contains(x.PatientId));

You can do this via RemoveAll using Contains:

list.RemoveAll( item => !list2.Contains(item));

Alternatively, if you just want the intersection, using Enumerable.Intersect would be more efficient:

list = list.Intersect(list2).ToList();

The difference is, in the latter case, you will not get duplicate entries. For example, if list2 contained 2, in the first case, you'd get {2,2,4,5}, in the second, you'd get {2,4,5}.

Tags:

C#

Lambda