我一直在寻找一种将该SQL语句转换为LINQ扩展方法的方法,但是没有找到任何方法。
Select A.* FROM (A LEFT OUTER JOIN B ON A.ID=B.ID) Where B IS NULL
我应该先在哪里做,然后再进行联接,最后选择。我可以使用什么方法。
答案 0 :(得分:1)
您可以使用GroupJoin
和SelectMany
方法的序列。我举了一个例子,其中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)
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();