Entity Framework Linq IQueryable 不包含 Contains 的定义

Entity Framework Linq IQueryable does not contain a definition for Contains

我有以下(有效)查询

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();

但我的问题是它最终会return双记录,因为一个子类别可以链接到多个类别。

也就是说,我们正在检索链接到类别 Cat_1 的子类别。 Sub_A 链接到 Cat_1 但也链接到 Cat_2,查询将从结果中过滤掉一次 Sub_A 因为它链接到 Cat_1CategoryLink table。但最后 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>

的接收器

为什么不允许我在上述查询中使用包含?我尝试用 IQueryable< DM.CategoryLink> test 替换 var test 但这没关系。

IQueryable<T>.Contains 有两个重载方法,并且都不接受任意类型。如果要检查项目是否在集合中,请改用 IQueryable<T>.Any

根据你的代码片段,我猜它可能是 test.Any(t => t.ID == t.Subcategory.ID)