C# EF核心包括多个级别的问题

C# EF核心包括多个级别的问题,c#,entity-framework,asp.net-core,entity-framework-core,C#,Entity Framework,Asp.net Core,Entity Framework Core,对于EF6,我是这样查询的,它工作得很好 IQueryable<Student> query = _testHelper.buildQuerty(id, userId) .Include(x => x.Class) .Include(x => x.Subjects) .Include(x => x.Subjects.Select(y => y.Category)); 问题: 这在EF Core 2.0中不起作用

对于EF6,我是这样查询的,它工作得很好

IQueryable<Student> query = _testHelper.buildQuerty(id, userId)
        .Include(x => x.Class)
        .Include(x => x.Subjects)
        .Include(x => x.Subjects.Select(y => y.Category));
问题: 这在EF Core 2.0中不起作用

错误

发生System.ArgumentException HResult=0x80070057消息= 属性表达式'Subjects=>{来自Subjects选择中的Subjects y [y] .Category}'无效。表达式应该表示一个属性 访问:“t=>t.MyProperty”。有关包括的详细信息 相关数据,请参阅

打开链接,并像这样重构,但它仍然不工作,并给出相同的错误

List<Student> query = _testHelper.buildQuerty(id, userId)
        .Include(x => x.Class)
        .Include(x => x.Subjects)
        .ThenInclude(Subjects => Subjects.Select(y => y.Category)).tolist();

问题出在哪里?

您错误地使用了最后一个包含链。您应该像下面的代码一样使用它

List<Student> query = _testHelper.buildQuerty(id, userId)
        .Include(x => x.Class)
        .Include(x => x.Subjects)
        .ThenInclude(subject => subject.Category);

使用此ThenClude扩展方法,您正在处理Subject的实例,因为上次使用的Include处理的是该类型的集合。

您错误地使用了ThenClude的最后一个链。您应该像下面的代码一样使用它

List<Student> query = _testHelper.buildQuerty(id, userId)
        .Include(x => x.Class)
        .Include(x => x.Subjects)
        .ThenInclude(subject => subject.Category);

使用此ThenInclude扩展方法,您正在处理Subject的实例,因为上次使用的Include处理的是该类型的集合。

谢谢,我知道这种方法,但懒得测试。你知道奇怪的是,当你在主题后面写点时,类别并没有显示出来,而是显示了所有与收藏相关的东西。。这就是为什么我选择了另一条不起作用的路。无论如何,谢谢。@simbada我在Visual Studio上进行Include时也尝试过这种错误的intellisense行为。这是因为两个重载都是表达式,intellisense不知道选择哪一个,并且总是选择以前选择的集合导航属性而不是实体。谢谢,我知道这种方法,但懒得测试。你知道奇怪的是,当你在主题后面写点时,类别并没有显示出来,而是显示了所有与收藏相关的东西。。这就是为什么我选择了另一条不起作用的路。无论如何,谢谢。@simbada我在Visual Studio上执行Include时也尝试过这种错误的intellisense行为。这是因为两个重载都是表达式,intellisense不知道选择哪一个,并且总是选择以前选择的集合导航属性而不是实体