В EF (при условии, что отображение выполнено правильно), объединения почти никогда не используются; вместо этого используются свойства навигации.
Ваш исходный SQL возвращает кортеж с повторяющимися записями имени. С LINQ это часто проще
"сформировать" запросы в результаты, не являющиеся кортежами.
Следующее должно быть таким же, как SQL, только вместо того, чтобы возвращать (Name, FacetTypeId) пары с повторяющимися Именами, он вернет тип, имеющий Имя и последовательность FacetTypeIds:
var facetIds = new [] { 8, 12 };
var result = from p in db.Products
select new
{
p.Name,
FacetTypeIds = from pf in p.FacetTypes
where pf.FacetTypeId == 8 || pf.FacetTypeId == 12
select pf.FacetTypeId,
};