如何在 Linq EntityFramework 4 中使用内连接和除外
Posted
技术标签:
【中文标题】如何在 Linq EntityFramework 4 中使用内连接和除外【英文标题】:How to use Inner Join and Except in Linq EntityFramework 4 【发布时间】:2013-08-21 18:43:11 【问题描述】:我有两个表具有一对多(详细信息)关系。
我想在 Linq 中编写这个查询(用 SQL 编写)。如你所见;它是子查询的内连接,其中包含 except:
select pa.* from dbo.Parent pa
inner join
(
select p.ID from dbo.Parent p
except
(
select d.ID from dbo.Details d where (d.ParentID = 371)
)
) p
on pa.ID = p.ID
where pa.ID <> 371
【问题讨论】:
LINQPad 非常适合这样的事情。 这是一个非常糟糕的 sql 查询,您要求我们进行一个非常糟糕的 linq 查询......子查询非常可疑,尝试仅使用连接和 where 子句对其进行重构。此时,您的 linq 查询应该更有意义。 【参考方案1】:var result = Parent.Where(p=>Details.Where(d=>d.ParentID!=371)
.Select(d=>d.ID)
.Contains(p.ID));
【讨论】:
【参考方案2】:king king 可能走在正确的道路上,但这里有一个使用连接的方法,
parent.Join(Details ,
parent => parent.Id,
detail => detail.Id,
(parent, detail) => new P = parent, D = detail)
.Where(e => e.D.ParentId != 371)
.Select(e => e.P);
【讨论】:
以上是关于如何在 Linq EntityFramework 4 中使用内连接和除外的主要内容,如果未能解决你的问题,请参考以下文章
EntityFramework group by linq 查询
Entityframework Core 3 linq表达式无法翻译
使用泛型类型执行 EntityFramework Core LINQ 查询
我想在 dotnetcore web api 控制器中使用 linq 方法通过 entityframework 从多个表中获取数据