C# Include()不起作用 var x=connection.Set() .包括(t=>t.Level) .选择(t=> 新{Team=t,LevelForTesting=t.Level}) 托利斯先生()

C# Include()不起作用 var x=connection.Set() .包括(t=>t.Level) .选择(t=> 新{Team=t,LevelForTesting=t.Level}) 托利斯先生(),c#,entity-framework,C#,Entity Framework,为什么我不获取对象x[0].Team.Level(我有'null'),但获取对象x[0].LevelForTesting?如何更改此代码以获取x[0].Team.Level?谢谢。您正在丢弃匿名选择的急切加载结果。只要放下选择,您就可以访问团队列表中的级别: var x = connection.Set<Team>() .Include(t => t.Level) .Select(t => new {Team = t, LevelForT

为什么我不获取对象x[0].Team.Level(我有'null'),但获取对象x[0].LevelForTesting?如何更改此代码以获取x[0].Team.Level?谢谢。

您正在丢弃匿名选择的急切加载结果。只要放下选择,您就可以访问
团队列表中的
级别

var x = connection.Set<Team>()
    .Include(t => t.Level)
    .Select(t => 
        new {Team = t, LevelForTesting = t.Level})
    .ToList()
var x=connection.Set().Include(t=>t.Level.ToList();
变量级别=x[0]。级别;

为了更好地理解懒惰/渴望加载,您应该。基本上,即时加载填充实体列表的指定导航属性

您正在通过匿名选择丢弃急切加载的结果。只要放下选择,您就可以访问
团队列表中的
级别

var x = connection.Set<Team>()
    .Include(t => t.Level)
    .Select(t => 
        new {Team = t, LevelForTesting = t.Level})
    .ToList()
var x=connection.Set().Include(t=>t.Level.ToList();
变量级别=x[0]。级别;

为了更好地理解懒惰/渴望加载,您应该。基本上,即时加载填充实体列表的指定导航属性

不幸的是,我无法删除匿名层,因为在实际代码中,我有一个更复杂的查询,它使用特定的投影类型。但是,您试图对投影执行的操作具有相同的效果,对于每个对象,您不是通过
Team
访问级别,而是通过匿名类型访问级别<代码>变量级别=x[0]。级别用于测试并没有造成太大的差异。
var qry=connection.From().Select(t=>newlevelsummarycollectionitem(){Team=t});var teamCondition=GetTeamCondition();如果(teamCondition!=null)qry=qry.Where(teamCondition);qry=qry.OrderBy(t=>t.Team.Level.Id);var teamList=qry.Select(t=>new{t.Team,t.Team.Level//.Include()}).ToList()我记得早期的代码运行得很好,但现在我在t.Team.Level中得到了“null”。所以我在寻找最简单的解决方法fix@Serg046它以前可能工作过,因为延迟加载(当您尝试访问
团队时,它会执行另一个查询)。您是否删除了
Team
virtual
关键字,或者专门在您的dbcontext中禁用了延迟加载/代理创建?@Serg046在
Team
模型中将virtual添加到属性:
公共虚拟级别{get;set;}
,然后您可以再次使用延迟加载。不幸的是,我无法删除匿名层,因为在实际代码中,我有一个更复杂的查询,它使用特定的投影类型。但是,您试图对投影执行的操作具有相同的效果,对于每个对象,您不是通过
Team
访问级别,而是通过匿名类型访问级别<代码>变量级别=x[0]。级别用于测试并没有造成太大的差异。
var qry=connection.From().Select(t=>newlevelsummarycollectionitem(){Team=t});var teamCondition=GetTeamCondition();如果(teamCondition!=null)qry=qry.Where(teamCondition);qry=qry.OrderBy(t=>t.Team.Level.Id);var teamList=qry.Select(t=>new{t.Team,t.Team.Level//.Include()}).ToList()我记得早期的代码运行得很好,但现在我在t.Team.Level中得到了“null”。所以我在寻找最简单的解决方法fix@Serg046它以前可能工作过,因为延迟加载(当您尝试访问
团队时,它会执行另一个查询)。您是否碰巧删除了
Team
virtual
关键字,或者专门在您的dbcontext中禁用了延迟加载/代理创建?@Serg046在
Team
模型中将virtual添加到属性:
公共虚拟级别{get;set;}
,然后您可以再次使用延迟加载。