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_1
在 CategoryLink
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)
我有以下(有效)查询
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_1
在 CategoryLink
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)