gpt4 book ai didi

c# - LINQ - 使用 NOT IN 选择 DISTINCT

转载 作者:行者123 更新时间:2023-11-30 21:20:28 26 4
gpt4 key购买 nike

我有一个 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();

我已经尝试了整个星期天,但 Except 语句不起作用。

在此先感谢您的帮助!

最佳答案

Except 方法需要两组相同类型的对象 - 这意味着您必须在嵌套查询以及外部查询中选择类型为 ManufractorCategory 的对象查询 - 然后它将选择第一个而不是第二个中的所有类别。

一个更简单的替代方法是使用 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 };

关于c# - LINQ - 使用 NOT IN 选择 DISTINCT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3276616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com