Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ-选择不在其中的独立项_C#_Linq_Distinct - Fatal编程技术网

C# 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));

我有一个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)); 
这是我最后一个不工作的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
子句将不会生效