左外部连接SQL到LINQ扩展方法
我一直在寻找将此SQL语句转换为LINQ扩展方法的方法,但没有找到任何方法左外部连接SQL到LINQ扩展方法,sql,entity-framework,linq,Sql,Entity Framework,Linq,我一直在寻找将此SQL语句转换为LINQ扩展方法的方法,但没有找到任何方法 Select A.* FROM (A LEFT OUTER JOIN B ON A.ID=B.ID) Where B IS NULL 我应该先做where,然后是join,最后是select。我可以使用哪些方法。您可以使用GroupJoin和SelectMany方法的顺序。我举了一个例子,在这个例子中,DbSet实例用简单的集合表示。只是为了让它清晰和可复制: [Test] public void Linq_LeftO
Select A.* FROM (A LEFT OUTER JOIN B ON A.ID=B.ID) Where B IS NULL
我应该先做where,然后是join,最后是select。我可以使用哪些方法。您可以使用
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);
}
[测试]
public void Linq_LeftOuterJoin()
{
//安排
列出许多例子。
希望有帮助。试试:
where子句中的“B”是列名吗?检查此链接可能有助于您使用非包含的(或非任何)测试而不是直接翻译SQL,或者只使用my翻译SQL。A
是否具有导航属性B
?或者EF中配置的A
和B
之间是否存在某种关系?
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();