IndexOf won't work, because you're always creating a new object (based on data from another source), so it will never be in the list of objects.
Unfortunately, you'll have to resort to a more complicated solution if you want a quick solution, or you'll have to check the entire list element by element to see if an object with that ID exists (slower).
In fact, the solution with TFPGMap is a bit more complicated, but in the end you create the class once and can use it later in other projects if you extract it into a separate entity.
As for Generics.Collection, it works without a problem in ObjFpc mode (see my example), you just need to specialize the types - but BinarySearch won't return results for the same reason as IndexOf.