【问题标题】:Entity Framework Core Exclude ResultsEntity Framework Core 排除结果
【发布时间】:2019-02-14 09:47:59
【问题描述】:

使用 Entity Framework Core 和 ASP.NET Core 2.1,如何返回一个表的结果,但前提是在第二个表中找不到该行 ID?

例如,应仅返回 Entity1 表中的前两行,因为第三行具有存储在 Entity2 表中的引用。

Entity1 表

+-----------+-----------+
| Entity1Id | Name      |
+-----------+-----------+
| 1         | Row One   |
| 2         | Row Two   |
| 3         | Row Three |
+-----------+-----------+

Entity2 表

+-----------+-----------+-----------+
| Entity2Id | Name      | Entity1Id |
+-----------+-----------+-----------+
| 1         | Row One   | 3         |
+-----------+-----------+-----------+

【问题讨论】:

    标签: c# sql-server asp.net-core entity-framework-core


    【解决方案1】:

    最直接的方法是使用可以如下描述的子查询:

    现在我们可以轻松地将公式转换为以下代码:

    IQueryable<Entity1> q = _context.Entity1.FromSql(
        @"select * from Entity1 
        where not exists(
            select Entity2.Id from Entity2 where Entity2.Entity1Id = Entity1.Id
        )"
    );
    

    另一种方法是左外连接:

    IQueryable<Entity1> q = from i in _context.Entity1
                            join j in _context.Entity2 on i.Id equals j.Entity1Id into jj
                            from x in jj.DefaultIfEmpty()
                            where jj.All(x=> x.Entity1Id!=i.Id)
                            select i ;
    

    【讨论】:

      【解决方案2】:

      你可以...

      var result = dbContext.Entity1.Where(w => !w.Entity2.Any()).ToList();
      

      这应该返回没有 Entity2 记录的所有 Entity1 行。

      【讨论】:

        猜你喜欢
        • 2017-07-24
        • 1970-01-01
        • 1970-01-01
        • 2021-02-02
        • 2022-01-09
        • 1970-01-01
        • 1970-01-01
        • 2021-04-28
        • 2017-08-05
        相关资源
        最近更新 更多