Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework Linq(p=>;p.Parent==null)在自引用表中是如何工作的?_Entity Framework_Linq - Fatal编程技术网

Entity framework Linq(p=>;p.Parent==null)在自引用表中是如何工作的?

Entity framework Linq(p=>;p.Parent==null)在自引用表中是如何工作的?,entity-framework,linq,Entity Framework,Linq,使用EF 2.0 Core,代码优先,我有一个定义自引用表的实体: class EntityX { public int EntityXId { get; set; } public string Name { get; set; } public int? ParentId { get; set; } //navigation properties public EntityX Parent { get; set; } public IColle

使用EF 2.0 Core,代码优先,我有一个定义自引用表的实体:

class EntityX
{
    public int EntityXId { get; set; }
    public string Name { get; set; }
    public int? ParentId { get; set; }
    //navigation properties
    public EntityX Parent { get; set; }
    public ICollection<EntityX> Children  { get; set; }
}
当我调用
entities.ToList()
时,这会得到我想要的:一个
parent
实体及其子实体的列表edit仅“第一代”子实体。当我省略
Where()
子句时,我得到所有实体及其子实体

我不明白为什么
Where()
子句有效。属于
子对象
集合的对象有一个
父对象
。为什么不省略呢


编辑:回答了我的问题,但请注意,我对Include()的工作原理的理解是错误的。

LINQ将
条件应用于所查询集合中的对象。使用
Include
方法加载的任何其他内容都不受相同条件的约束。事实上,EF没有提供限制关联实体()的直接方法


这就是顶级查询为您带来所需内容的方式。EF使用父ID通过单独的RDBMS查询递归地检索子项以获取其所有子项。
Where
方法的限制不适用于子查询。

Where
子句只影响根元素。对于递归加载的子级,情况可能并非如此,而是在最初包含的子级之后延迟加载所有内容。
var entities = context.EntityX
    .Include(p => p.Parent)
    .Include(p => p.Children)
    .Where(p => p.Parent == null);