Извините, недостаточно символов для ответа в комментарии.
У вас должен быть один объект домена, Product.У него могут быть ненулевое имя, ProductNumber и Price, потому что вы не можете иметь продукты, у которых нет таких вещей.
Рейтинг должен быть обнуляемым, потому что возможно иметь продукт, который не имеетрейтинг.Независимо от того, имеет ли Продукт рейтинг, он все равно всегда является Продуктом.Я оставлю «Кол-во продаж», потому что на самом деле я не буду хранить это как свойство продукта, у меня будут коллекции «Заказы» и «Линия заказов», и я буду рассчитывать количество «Проданных» из них (нормализация).Однако, в отсутствие этих других коллекций, вы можете сохранить его как поле в Product.Если бы я собирался это сделать, это было бы целочисленное свойство, не равное нулю, по умолчанию равное нулю.
Для фильтрации вам нужна только одна коллекция, которая была бы некоторой реализацией IEnumerable или IQueryable или обоих,скорее всего, вы бы выбрали что-то вроде Entity Framework и на самом деле имели бы ObjectSet, но я бы постарался не зависеть от того, какой метод хранения я использую, и работать с этими интерфейсами.
Затем вы можете запросить свойединая коллекция, чтобы определить, какие атрибуты являются нулевыми в Продуктах в модели вашего домена.Синтаксис может быть не идеальным, но Intellisense ничего не поймет, я - парень из VB в 99% случаев.
var productsWithNoSales = Context.Products.Where(p=> p.QuantitySold == 0);
var productsWithNoRating = Context.Products.Where(p=> p.Rating == nothing);
var productsWithNoSalesOrRating = Context.Products.Where(p=> p.QuantitySold == 0).Where(p=> p.Rating == nothing);
Это в значительной степени самая чистая возможная модель предметной области для того, что вам нужно.
Наследование было бы, если бы у вас были специализированные производные продукта, обладающие либо дополнительными свойствами, либо другим поведением.Например, моя собственная система имеет базовый класс Product и сущность EbayProduct и AmazonProduct, которые оба наследуются от Product и содержат только дополнительную логику и свойства, связанные с работой с этими сайтами.В классе «Мой продукт» около 20 свойств, в основном обнуляемых, так как при перечислении продуктов у нас не обязательно есть вся доступная информация.Из этих 20 я больше всего отображаю на любой странице около 15. Я, вероятно, делаю что-то похожее на то, что вы пытаетесь сделать, в том, что я отфильтровываю Продукты, которые еще не готовы перечислить, используя точный описанный метод, т.е.Коллекция моих товаров для пропущенных полей.