首页 > 解决方案 > 如何使用 Z.EntityFramework 过滤和包含子项

问题描述

下面的查询使用 Z.EntityFramework.Plus.EF6 过滤子项。它的过滤并AssetXref正确包含实体,但结果不能包含Child.Parent实体关系

   var result = await _repository.GetQuery<Assets>()
                      .IncludeFilter(x => x.AssetsXRef
                                        .Where(y => y.Child.Perent.ParentID == parentID)
                                        .Select(y => y.Child.Perent)
                                    )
                     .Where(x => x.Active == true)
                     .ToListAsync();

我也试过

   var result = await _repository.GetQuery<Assets>()
                      .IncludeFilter(x => x.AssetsXRef
                                        .Where(y => y.Child.Perent.ParentID == parentID)                                        
                                    )
                     .Include(x=>x.AssetsXRef.Select(y=>y.Child.Parent))
                     .Where(x => x.Active == true)
                     .ToListAsync();

标签: entity-frameworkentity-framework-6entity-framework-plus

解决方案


IncludeFilter不兼容IncludeIncludeFilter即使没有过滤器也需要一路使用

此外,您需要始终对孩子使用完整的父过滤器

这是一个例子:

var result = await _repository.GetQuery<Assets>()
                     .IncludeFilter(x => x.AssetsXRef.Where(y => y.Child.Perent.ParentID == parentID))
                     // Might be SelectMany
                     .IncludeFilter(x => x.AssetsXRef.Where(y => y.Child.Perent.ParentID == parentID).Select(y=>y.Child.Parent))
                     .Where(x => x.Active == true)
                     .ToListAsync();

推荐阅读