如何在 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 从多个表中获取数据

EntityFramework 模型的通用 Getter

如何在 Linq 查询中多次包含一个表