Как было объяснено другими ответами, ошибка, с которой столкнулся OP, заключалась в том, что результатом его кода была коллекция целых чисел, а не коллекция категорий.
То, что не было ответа, было его вопросом о том, как использовать коллекцию целых чисел в соединении или что-то еще, чтобы получить некоторые полезные данные. Я попытаюсь сделать это здесь.
Теперь я не совсем уверен, почему ОП хотел получить отдельный список Prod_Ids из категорий, а не просто получить Prod_Ids из проектов. Возможно, он хотел выяснить, какие продукты относятся к одной или нескольким категориям, поэтому любые некатегоризованные продукты будут исключены из результатов. Я предполагаю, что это так, и что желаемый результат - это набор отдельных продуктов, которые имеют связанные категории. Сначала я отвечу на вопрос о том, что делать с Prod_Ids, а затем предложу несколько альтернатив.
Мы можем взять коллекцию Prod_Ids точно так, как они были созданы в вопросе как запрос:
var query = _StoreDB.Categories.Select(m => m.Prod_Id).Distinct();
Тогда мы будем использовать объединение, вот так:
var products = query.Join(_StoreDB.Products, id => id, p => p.Prod_Id,
(id,p) => p);
Принимает запрос, объединяет его с таблицей Products, указывает используемые ключи и, наконец, говорит, что нужно возвращать сущность Product из каждого соответствующего набора. Поскольку мы знаем, что Prod_Ids в запросе уникальны (из-за Distinct ()), а Prod_Ids в продуктах уникальны (по определению, потому что это первичный ключ), мы знаем, что результаты будут уникальными без вызова Distinct (). .
Теперь все вышесказанное даст желаемые результаты, но это определенно не самый чистый или самый простой способ сделать это. Если сущности Category определены с помощью реляционного свойства, которое возвращает связанную запись из Products (которая, вероятно, будет называться Product), простейшим способом сделать то, что мы пытаемся сделать, будет следующее:
var products = _StoreDB.Categories.Select(c => c.Product).Distinct();
Это получает Продукт из каждой Категории и возвращает отдельную коллекцию из них.
Если у сущности Category нет реляционного свойства Product, мы можем вернуться к использованию функции Join для получения наших Продуктов.
var products = _StoreDB.Categories.Join(_StoreDB.Products, c => c.Prod_Id,
p => p.Prod_Id, (c,p) => p).Distinct();
Наконец, если мы не просто хотим получить простую коллекцию Продуктов, то нужно еще кое-что рассмотреть, и, возможно, самой простой вещью будет обращение с этим при переборе Продуктов. Другой пример - подсчет количества категорий, к которым принадлежит каждый продукт. Если это так, я бы изменил логику и начал с продуктов, например так:
var productsWithCount = _StoreDB.Products.Select(p => new { Product = p,
NumberOfCategories = _StoreDB.Categories.Count(c => c.Prod_Id == p.Prod_Id)});
Это приведет к коллекции анонимных типизированных объектов, которые ссылаются на Product и NumberOfCategories, связанные с этим Product. Если нам все еще нужно исключить некатеризованные продукты, мы можем добавить .Where(r => r.NumberOfCategories > 0)
перед точкой с запятой. Конечно, если сущность Product определена с помощью реляционного свойства для связанных категорий, вам это не понадобится, поскольку вы можете просто взять любой продукт и выполнить следующие действия:
int NumberOfCategories = product.Categories.Count();
Во всяком случае, извините за то, что мы пошли дальше. Я надеюсь, что это окажется полезным для всех, кто сталкивается с подобной проблемой. ;)