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

时间:2017-06-20 10:14:44

标签: 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("CreatedByUserId")]
    public ICollection<User> CreatedUsers { get; set; }    

    [ForeignKey("CreatedByUserId")]
    public User CreatedByUser { get; set; }
}

在我尝试include CreatedByUser属性以及Take方法之前,一切正常。请考虑以下示例:

 // 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

奇怪的是,当我从result1调用ToList()查询时,它会返回正确的结果。当我在Visual Studio调试中查看结果时也是如此。

有人可以解释发生了什么吗?我想这并不重要,因为调用FirstOrDefault设置了底层SQL查询的Top参数,但仍然......这让我很头疼。

0 个答案:

没有答案