左外连接SQL到LINQ扩展方法

时间:2018-09-11 13:56:09

标签: sql entity-framework linq

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

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

我应该先在哪里做,然后再进行联接,最后选择。我可以使用什么方法。

2 个答案:

答案 0 :(得分: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。 希望对您有所帮助。

答案 1 :(得分:0)

尝试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();