【问题标题】:How to use Inner Join and Except in Linq EntityFramework 4如何在 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 查询应该更有意义。

标签: c# linq tsql sql-to-linq-conversion


【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      相关资源
      最近更新 更多