У меня есть следующий (рабочий) запрос
return _context.SubCategories
.Join(_context.CategoryLinks,
sc => sc.ID,
cl => cl.SubCategoryID,
(sc, cl) => new { SubCategory = sc, CategoryLinks = cl })
.Where(x => x.CategoryLinks.CategoryID != CategoryID)
.Select(x => x.SubCategory).Distinct();
Но моя проблема в том, что в итоге он вернет двойные записи, так как подкатегория может быть связана с несколькими категориями.
То есть мы получаем подкатегории, связанные с категорией Cat_1
. Sub_A
связан с Cat_1
, но также и с Cat_2
, запрос отфильтрует Sub_A из результата, поскольку он связан с Cat_1
в таблице CategoryLink
. Но в конце концов Sub_A will
по-прежнему будет частью resultset
, так как он также связан с Cat_2
Поэтому я подумал, что если я сначала получу подкатегории (см. Код ниже), а затем отфильтрую те, которые уже использовались с содержимым, могут решить мою проблему.
var test = _context.CategoryLinks.Where(x => x.CategoryID == CategoryID);
IQueryable<DM.SubCategory> aaa = _context.SubCategories
.Join(_context.CategoryLinks,
sc => sc.ID,
cl => cl.SubCategoryID,
(sc, cl) => new { SubCategory = sc, CategoryLinks = cl })
.Where(x => x.CategoryLinks.CategoryID != CategoryID && !test.Contains(x.SubCategory.ID))
.Select(x => x.SubCategory);
Однако при попытке сделать test.Contains
я получаю сообщение об ошибке; IQueryable<CategoryLink>
не содержит определения для Contains
, а для лучшей перегрузки метода расширения ParallelEnumerable.Contains<Guid>(ParallelQuery<Guid>, Guid)
требуется приемник типа ParallelQuery<Guid>
Почему он не позволяет мне использовать содержимое в приведенном выше запросе? Я попытался заменить var test на IQueryable< DM.CategoryLink> test
, но это не имело значения.