【问题标题】:Left Outer Join SQL to LINQ Extension Methods左外连接 SQL 到 LINQ 扩展方法
【发布时间】:2018-09-11 13:56:08
【问题描述】:

我一直在寻找将这条 SQL 语句转换为 LINQ 扩展方法的方法,但没有找到任何方法。

Select A.* FROM (A LEFT OUTER JOIN B ON A.ID=B.ID) Where B IS NULL

我应该先执行 where,然后是 join,最后是 select。我可以使用哪些方法。

【问题讨论】:

标签: sql entity-framework linq


【解决方案1】:

您可以使用GroupJoinSelectMany 方法的序列。我做了一个例子,其中DbSet 实例以简单的集合呈现。只是为了使其清晰和可重现:

[Test]
public void Linq_LeftOuterJoin()
{
    // Arrange
    List<A> A = new List<A>
    {
        new A { Id = 1},
        new A { Id = 2},
        new A { Id = 3},
        new A { Id = 4}
    };

    List<B> B = new List<B>
    {
        new B { Id = 3},
        new B { Id = 4}
    };

    // Act
    var join = A.GroupJoin(B, a => a.Id, b => b.Id, (a, b) => new {a, b})
                .SelectMany(t => t.b.DefaultIfEmpty(), (a, b) => new {a.a, b})
                .Where(t => t.b == null)
                .Select(t => t.a);

    //Assert
    Assert.AreEqual(join.Count(), 2);
    Assert.AreEqual(join.Count(a => a.Id == 1), 1);
    Assert.AreEqual(join.Count(a => a.Id == 2), 1);
}

还请查看this question 的许多示例。 希望对您有所帮助。

【讨论】:

    【解决方案2】:

    试试this solution:

    var result = (from A in listA
                  join B in listB on A.ID equlas B.ID into subs
                  from sub in subs.DefaultIfEmpty()
                  where sub == null
                  select A).ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-04
      • 2010-10-09
      • 1970-01-01
      • 2013-05-26
      • 1970-01-01
      相关资源
      最近更新 更多