我在这里有一个查询,它获取单个实体对象,只有一个符合特定条件的嵌套实体,但我在执行时收到错误。
这是查询
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();
答案 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。