Помимо синтаксических вариаций, вы можете написать это практически таким же образом.
from p in ctx.Product
where (from ptp in ctx.ProductTypeParty
where ptp.PartyId == 34
select ptp.Id).Contains(p.ProductTypePartyID)
select p
Я предпочитаю использовать экзистенциальный квантор, хотя:
from p in ctx.Product
where (from ptp in ctx.ProductTypeParty
where ptp.PartyId == 34
&& ptp.Id == p.ProductTypePartyID).Any()
select p
Я ожидаю, что эта форма будетразрешить EXISTS (SELECT * ...)
в сгенерированном SQL.
Вы захотите профилировать оба варианта в случае большой разницы в производительности.