包含具有where条件的关系数据

时间:2012-11-30 12:07:19

标签: entity-framework

我有这样的实体:

public class A 
{
    public List<B> B { get;set; }
}

public class B 
{
    public DateTime Date { get; set; }
    public List<C> C { get; set; }
}

public class C { }

我需要从A获得C,其中B.Date&gt; DateTime.Now .. 我正在尝试这样的事情:

var users = _db.A
.Select(a => new
{
    A = a,
    B = a.B
    .Where(b => b.Date >= DateTime.Now).Select(p => new
    {
        B = b,
        C = b.C
    })
})
.AsEnumerable()
.Select(a => a.A)
.ToList();

但C始终为空。 我怎么能得到C?


更新

如果我在'List C'中设置虚拟它可以正常工作!! 如何在不设置虚拟的情况下完成此工作?

1 个答案:

答案 0 :(得分:1)

您可以尝试手动构建对象图。以下将只运行一个数据库查询(当第一个foreach循环执行时,其余的在内存中执行):

var userQuery = _db.A
    .Select(a => new
    {
        A = a,
        B = a.B.Where(b => b.Date >= DateTime.Now).Select(p => new
        {
            B = b,
            C = b.C
        })
    });

var users = new List<A>();
foreach (var u in userQuery)
{
    A a = u.A;
    a.B = new List<B>();
    foreach (var x in u.B)
    {
        B b = x.B;
        b.C = x.C;
        a.B.Add(b);
    }
    users.Add(a);
}