我正在使用 VS2017 创建一个 ASP.NET Web 应用程序(不使用 CORE),.NET Framework 是 4.6.2,Entity Framework .NET 是 6.1.3。我在这里寻找我的答案,但我没有尝试过或提到过的所有内容。
我现在有以下代码来获取特定 parent 的 child 的孙子,我知道必须有一种更有效的方法来获取这些孙子,但不知道如何:
using (_ge = new generation_entities())
{
if (_id != null)
{
List<scheduleheader> _tlist = (from a in _ge.scheduleheaders.Include("scheduledetails") where a.programID == _id select a).ToList();
foreach (scheduleheader _t in _tlist)
{
foreach (scheduledetail _s in _t.scheduledetails)
{
_s.scheddtlcustoms = (from a in _ge.scheddtlcustoms where a.dtlID == _s.dtlID select a).ToList();
_s.scheddtlstandards = (from a in _ge.scheddtlstandards where a.dtlID == _s.dtlID select a).ToList();
_s.scheddtltalks = (from a in _ge.scheddtltalks where a.dtlID == _s.dtlID select a).ToList();
_s.scheddtlvenues = (from a in _ge.scheddtlvenues where a.dtlID == _s.dtlID select a).ToList();
_s.scheduledtlrecurrences = (from a in _ge.scheduledtlrecurrences where a.dtlID == _s.dtlID select a).ToList();
}
}
return _tlist;
}
else
return (from a in _ge.scheduleheaders where a.scheduledetails.Any(b => b.start > DateTime.Today.AddDays(-30)) && a.programID == null select a).ToList();
}
我已经尝试使用 .ThenInclude
和 Include("xxxx.xxxx.xxxx")
但是,.ThenInclude
甚至不可用我和 Include("xxxx.xxxx.xxxx")
只适用于一个孙子。 Include()
只允许我输入字符串路径,但我看到评论说 OP 使用的是旧版本的 EF。
我卡在这上面了,如果我在这里遗漏了什么,我能得到启发吗?
最佳答案
你可以尝试这样的事情:
var query = context
.Parents
.Include(p=>p.children)
.Include(p=>p.children.Select(x=>x.Grandchild1))
.Include(p=>p.children.Select(x=>x.Grandchild2))
.ToList();
您可以使用 linq
访问它,您可能有一个 id,您可以在其中执行以下操作:
var grandchild6 = query
.children
.FirstOrDefault(child=>child.Id =1)
?.GranChildern
?.FirstOrDefault(grandChild=>grandchild.Id = 6);
关于c# - 从 Entity Framework .NET 返回父子的多个孙子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46856286/