Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
左外部连接SQL到LINQ扩展方法_Sql_Entity Framework_Linq - Fatal编程技术网

左外部连接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

我一直在寻找将此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_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();