Вы можете использовать последовательность методов 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);
}
Также, пожалуйста, посмотрите на этот вопрос со многими примерами.
Надеюсь, это поможет.