У меня есть это выражение:
var result = from pav in ProductAttributes
join id in valueIds
on pav.AttributeValueID equals id
select pav.ProductImageID;
, который работает до определенного момента. Проблема заключается в том, что коллекция ProductAttributes содержит один и тот же продукт много раз для каждого атрибута. Это структура:
ID - уникальный
ProductID
ProductAttributeValueID
ProductImageID
Таким образом, Товар может появляться в коллекции много раз. Я хочу, чтобы результат фактически отфильтровал OUT всех продуктов, которые вообще не имеют совпадений в valueIds (это список ProductAttributeValueIDs).
Так что я хочу вернуть ТОЛЬКО продукты, которые имеют ВСЕ КОМБИНИРОВАННЫЕ valueIds, а не только ЛЮБОЙ из них, что и делает вышеприведенное выражение linq.
PS Я могу опубликовать код SQL, который показывает, что я имею в виду в SQL, если это поможет!
@ devgeezer опубликовал ответ, который был достаточно близок, но работал только для одного значения.
Я закончил с кодом ниже, который работает. Я группирую по ProductID, затем использую его во втором запросе для фильтрации исходной коллекции:
var result =
from pav in ProductAttributeValues
join id in valueIds
on pav.AttributeValueID equals id
group pav by pav.ProductID into gj
where gj.Count() == valueIds.Count()
select gj.Key;
var imageIds = from pav in ProductAttributeValues
join id in result
on pav.ProductID equals id
select pav.ProductImageID;