作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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/
我是一名优秀的程序员,十分优秀!