使用.include获取嵌套对象时实体框架抛出错误

时间:2016-11-18 21:40:47

标签: c# entity-framework linq-to-entities

我在这里有一个查询,它获取单个实体对象,只有一个符合特定条件的嵌套实体,但我在执行时收到错误。

这是查询

Profile profile = dbContext.Profiles.Where(i => i.ApplicationUserGuid == guiId)
               .Include(i => i.ProfileImages.Where(k => k.IsMainImage == true)).First();

这是异常错误消息

  

Include路径表达式必须引用在类型上定义的导航属性。使用虚线路径作为参考导航属性,使用Select运算符作为集合导航属性。   参数名称:路径

我也尝试用另一个.First()运行它,但仍然是相同的错误消息

Profile profile = dbContext.Profiles.Where(i => i.ApplicationUserGuid == guiId)
              .Include(i => i.ProfileImages.Where(k => k.IsMainImage == true).First()).First();

1 个答案:

答案 0 :(得分:2)

您无法过滤Include内的相关实体,您需要使用预期结果投影查询或使用explicit loading

Profile profile = dbContext.Profiles
                           .Where(i => i.ApplicationUserGuid == guiId)
                           .First();
dbContext.Entry(profile) //Explicit Loading
         .Collection(b => b.ProfileImages) 
         .Query() 
         .Where(k => k.IsMainImage == true).Take(1)
         .Load(); 

如果你进行投影,它将只是你的数据库的一次往返,如果你使用显式加载,它将是两个。

只是一个FYI,如果您考虑投影结果,投影到匿名类型或DTO。更多信息here