Если я не правильно понял вопрос, я не думаю, что ответ на самом деле о том, как сделать оператор in в Linq, потому что вы фактически сравниваете результаты двух списков.
Я не эксперт в этом, так как я не использую Linq на повседневной основе (я человек из NH Criteria), но то, что вы действительно хотите здесь, это либо объединение, либо динамически построенный набор ИЛИ заявления?
«Дайте мне все товары, к которым относится эта категория, та или иная»
Или же
«Дайте мне все продукты, где эта категория»
союз
«Дайте мне все продукты, где эта категория»
союз
«Дайте мне все продукты, где эта категория»
Поскольку я не совсем в курсе дела с Linq, я не собираюсь пытаться составить заявление для этого, но я готов поспорить, что это хорошо задокументированная проблема в интернете? :)
[Изменить]
Пошел и посмотрел - что-то вроде этой работы?
var query =
from p in products
where p.Categories.Any(c=> selectedCategories.Contains(c))
select p;
Где категории - это список категорий, с которыми вы сравниваете