I'm looking for most elegant and efficient way to exclude elements from one list which are existing in another. Let's say there is:

```
List<A> As which contains more than 1 000 000 records
List<B> Bs which contains more than 100 000 records

```

I need to remove all elements from list `As` where `As.Id` is equal `Bs.Id`. I just need to reduce As by elements from Bs containing same Id. Operations my repeat hundreds times. What is the most efficient (and elegant) way to solve that issue? I wish *LINQ* had `NotIn`.

```
foreach(a in As)
{
    if(Bs.Any(b => b.Id == a.Id)
        As.Remove(a);
}

```

Takes pretty long to complete.