Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/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 为什么FirstOrDefault和ToList在某些情况下返回不同的结果?_Entity Framework - Fatal编程技术网

Entity framework 为什么FirstOrDefault和ToList在某些情况下返回不同的结果?

Entity framework 为什么FirstOrDefault和ToList在某些情况下返回不同的结果?,entity-framework,Entity Framework,我有一个引用自身的实体模型,如: public class User { public int Id { get; set; } [MaxLength(150)] [Required] public string FirstName { get; set; } [Required] public int? CreatedByUserId { get; set; } [ForeignKey("CreatedByUserI

我有一个引用自身的实体模型,如:

public class User
{       

    public int Id { get; set; }

    [MaxLength(150)]
    [Required]
    public string FirstName { get; set; }

    [Required]
    public int? CreatedByUserId { get; set; }

    [ForeignKey("CreatedByUserId")]
    public ICollection<User> CreatedUsers { get; set; }    

    [ForeignKey("CreatedByUserId")]
    public User CreatedByUser { get; set; }
}
奇怪的是,当我对result1的查询调用
ToList()
时,它返回正确的结果。在VisualStudio调试中查看结果时也是如此


有人能解释一下发生了什么事吗?我想这并不重要,因为调用
FirstOrDefault
设置了底层SQL查询的
Top
参数,但仍然。。这让我在调试时感到非常头疼。

了解一下延迟执行:嘿,刚刚尝试了一下,结果也一样。我真的不明白为什么会这样。几乎对我来说是个bug。你确定Tom和Rita在他们的
CreatedByUser
字段上都有值吗?因为CreatedByUserId是可空的,如果该值为空,那么.Include将不会显示具有空值的条目。请尝试在
.Where()
语句之前插入
.Include(m=>m.CreatedByUser)
,并检查是否有任何差异。删除了我自己的注释bc,我自己也尝试过。不,这不是一个bug,我想这是因为你说的是Users.Where().Take(1)->现在什么都没有发生,直到现在,因为你没有说出你想要什么。正如您所说,添加ToList()可以解析查询,然后您可以调用其他include。请看这里:
 // say that user 'Rita' was created by 'Tom'    
 var result1 = await Dependencies.AppDbContext.Users.Where(m => m.FirstName == "Rita").Take(1).Include(m => m.CreatedByUser).FirstOrDefaultAsync();
 // result1 = 'Tom', but I would expect it to be 'Rita';

 var result2 = await Dependencies.AppDbContext.Users.Where(m => m.FirstName == "Rita").Include(m => m.CreatedByUser).FirstOrDefaultAsync();
// result2 = 'Rita' which is what I expect