Я думаю, это потому, что создаваемое вами утверждение преобразуется в SQL за кулисами и запускается в базе данных.Поскольку разные контексты могут поступать из разных баз данных или даже с разных серверов, нет гарантии, что данные в context2 доступны для context1 при запросе сервера.
Вы можете вернуть данные из каждого контекста и преобразовать их в IEnumerableи затем выполните стандартные запросы linq, но у вас есть явные накладные расходы на передачу данных и обработку в памяти, которые в противном случае выполнялись бы ядром базы данных.