Entity framework 实体框架dbSet.Include(x=>;x.Offer.Images.Where(y=>;y.IsDeleted==false))

Entity framework 实体框架dbSet.Include(x=>;x.Offer.Images.Where(y=>;y.IsDeleted==false)),entity-framework,include,where,Entity Framework,Include,Where,如何将此查询转换为有效的实体框架查询 dbSet.Include(x=>x.Offer.Images.Where(y=>y.IsDeleted == false)) Where子句引发异常: 包含路径表达式必须引用在类型上定义的导航属性。使用虚线路径作为参考导航属性,选择运算符作为集合导航属性 我已经试过第三方库IncludeFilter,它可以工作。但是,它不允许我使用其他包括: dbSet.Include(x=>x.Offer.Images.Where(y=>y.I

如何将此查询转换为有效的实体框架查询

dbSet.Include(x=>x.Offer.Images.Where(y=>y.IsDeleted == false))
Where子句引发异常:

包含路径表达式必须引用在类型上定义的导航属性。使用虚线路径作为参考导航属性,选择运算符作为集合导航属性

我已经试过第三方库IncludeFilter,它可以工作。但是,它不允许我使用其他包括:

dbSet.Include(x=>x.Offer.Images.Where(y=>y.IsDeleted == false)).Include(x=>x.Demand)

非常感谢:-)

Include只是一个标记,用于告诉EF与负载相关的实体。它不支持快速加载选定的亲属子集,例如活动项

使用软删除模型(IsDeleted/IsActive)时,将使用活动子对象填充视图模型。为读取操作返回视图模型的好处是,可以避免潜在的延迟加载场景,只需检索需要使用的数据。对于编辑操作,我将加载相关数据,通常需要活动和非活动记录

var viewModels = dbset.Select(x => new MyVM
{
  Objectid = x.ObjectId,
  // ...
  Offer = new OfferViewModel
  {
    OfferId = x.Offer.OfferId,
    // ...
    Images = x.Offer.Images
      .Where(i => !i.IsDeleted) // Load only active images
      .Select(i => new ImageViewModel 
      {
        ImageId = i.ImageId,
        //...
      }).ToList()
  }
}
请注意,这不需要显式的
.Include()
语句,只需加载所需的数据即可

当我去保存对实体图的更改时,我会用
.Include(x=>x.Order).Include(x=>x.Order.Images)
加载根实体,以确保包含所有相关数据。EF应在应用更新之前了解完整的集合,以避免意外情况,例如重复的记录插入尝试

我已经试过第三方库IncludeFilter,它可以工作。但是,它不允许我使用其他包括:

dbSet.Include(x=>x.Offer.Images.Where(y=>y.IsDeleted == false)).Include(x=>x.Demand)
开始使用IncludeFilter时,即使不进行筛选,也需要一直使用它

dbSet.IncludeFilter(x=>x.Offer.Images.Where(y=>y.IsDeleted == false))
.IncludeFilter(x=>x.Demand)

谢谢,这对我帮助很大。你能给我分享一些链接或书籍,从那里可以了解更多关于Linq的信息吗?我在寻找高级主题,而不是基础。除了谷歌搜索之外,我不知道Linq还有什么其他的热门话题,但是关于EF的一些性能注意事项的一个很好的概述是: