C# LINQ-选择不在其中的独立项
我有一个SQL语句,我正试图在LINQ语句中转换它C# LINQ-选择不在其中的独立项,c#,linq,distinct,C#,Linq,Distinct,我有一个SQL语句,我正试图在LINQ语句中转换它 SELECT DISTINCT mc.* FROM ManufractorCategories mc WHERE mc.Active = 'true' AND mc.Folder = 'false' AND (mc.Id not in (SELECT Category_id FROM Manufractor_Category WHERE Manufractor_id = 3));
SELECT DISTINCT mc.*
FROM ManufractorCategories mc
WHERE mc.Active = 'true'
AND mc.Folder = 'false'
AND (mc.Id not in (SELECT Category_id FROM Manufractor_Category
WHERE Manufractor_id = 3));
这是我最后一个不工作的LINQ声明
(IQueryable<object>)db.ManufractorCategories
.Where(o => o.Active == active)
.Where(o => o.Folder == folder)
.Select(i => new { i.Id, i.Folder }).Except(db.Manufractor_Categories.Where(t => t.Manufractor_id == id).Select(t => new { t.Category_id })).Distinct();
(IQueryable)db.ManufactorCategories
。其中(o=>o.Active==Active)
.Where(o=>o.Folder==Folder)
.Select(i=>new{i.Id,i.Folder}).Except(db.Manufractor_Categories.Where(t=>t.Manufractor_Id==Id).Select(t=>new{t.Categories_Id}).Distinct();
我已经试了整个星期天了,但是Except语句不起作用
感谢您的帮助 Exception方法需要两组相同类型的对象-这意味着您必须在嵌套查询和外部查询中选择类型为
ManufactorCategory
的对象-然后它将选择第一个查询中的所有类别,而不是第二个查询中的所有类别
一种更简单的方法是使用Contains
方法检查当前ID是否在要筛选的ID列表中。以下方面应起作用:
var q =
db.ManufractorCategories
.Where(o => o.Active == active)
.Where(o => o.Folder == folder)
.Select(i => new { i.Id, i.Folder })
.Where(o =>
!db.Manufractor_Categories
.Select(t => t.Manufractor_id)
.Contains(o.Id)
.Distinct();
以及使用查询语法的简化版本:
var q =
from o in db.ManufractorCategories
where o.Active == active && o.Folder == folder &&
db.Manufractor_Categories
.Select(t => t.Manufractor_id)
.Contains(o.Id)
select new { i.Id, i.Folder };
Except
语句将获得具有Category\u id
属性的对象列表。然而,您的查询结果包含具有Id
和文件夹属性的对象。查询很可能无法看到这些对象在哪里相等,因此,Except
子句将不会生效