1

我一直在搜索但没有成功(或不知道如何正确搜索)所以我来找你。

查看这些测试类:

public class A {
    int Id;
    ICollection<B> Bs;
}
public class B {
    int Id;
    int AId;
    ICollection<C> Cs;
}
public class C {
    int Id;
    int BId;
    ICollection<D> D;
}
public class D {
    int Id;
    int CId;
    bool Show;
}

我想要做的是使用急切加载在 1 次调用中获取所有这些类(确保数据库只被调用一次)。

下面是TSQL我要转换为LINQ Method语法的实际内容(我认为是正确的术语)而不是LINQ Query语法。

SELECT *
FROM A
LEFT JOIN B ON B.AId = A.Id
LEFT JOIN C ON C.BId = B.Id
LEFT JOIN D ON D.CId = C.Id
WHERE A.Id = 1

这是我到目前为止所得到的

var x = db.A
        .Include(a => a.B)
        .Include(a => a.Bs.Select(b => b.C)
        // How do I get D?
        .FirstOrDefault(a => a.Id == 1);

虽然我不认为这很重要,但我想指出,以防万一,最后,我需要做一些事情A,然后,我需要得到所有D的有Show == true

4

1 回答 1

1

您的示例模型有点不一致,您为模型类和 LINQ 查询使用不同的名称,例如Bvs BsSelect()除此之外,我相信您可以通过在内部查询中嵌套另一个来实现您想要的。

例如

var x = db.A
    .Include(a => a.Bs.Select(b => b.Cs.Select(c => c.Ds))
    .FirstOrDefault(a => a.Id == 1);
于 2018-05-20T03:10:21.633 回答