我有这样的实体:
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'中设置虚拟它可以正常工作!! 如何在不设置虚拟的情况下完成此工作?
答案 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);
}