I suggest to profile that piece of code.
I guess the most time consuming call is the FirstOrDefault-Extension Method.
To use for instead of foreach is unlikely to grant you much if any performance gains.
Most probably your problems stems from your context variables, maybe a very large source list?
Overall, this code section is maybe not the best place to look for performance improvements. If this is the only place, you should think about a redesign.
If you have very large lists and do not fear concurrency issues you could go the parallel or multi-processing route. parallel.foreach is a cheap way to do some tests.
The use of a Dictionary instead of a List should speedup things. If you go with a HashSet (to yield the benefit of uniqunes) be aware to implement a proper IEqualityComparer, or you could even lose performance when you add a huge number of items relying on the DefaultComparer.