0

我有这个实体:

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 { }

我需要从 B.Date > DateTime.Now 的 A 中获取 C。我正在尝试这样的事情:

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?


更新

如果我在“列表 C”中设置虚拟,它就可以工作!!如何在不设置虚拟的情况下完成这项工作?

4

1 回答 1

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);
}
于 2012-12-02T14:04:06.693 回答