使用 EntityFrameworkPlus IncludeFilter 在 ThenInclude 上进行过滤
Filtering On ThenInclude, with EntityFrameworkPlus IncludeFilter
我正在尝试向下过滤三个子级别并仅查找 PropertyMailingAddress.Status== True.
的子元素
如何将过滤器向下转换三级并使用 EntityFrameworkPlus IncludeFilter 进行嵌套过滤?什么是最有效的方法?
Class 结构是这样嵌套的:
- 属性
- 属性派对
- 聚会
- 派对邮寄地址
- 属性MailingAddress <--- Status 应该等于 true(任何 Status == False 的孙子 属性MailingAddress 节点,应该从这个嵌套的孙子分支中删除,保留属性MailingAddress 节点为 True)
原来的方法不行:
var result = await db.Property.Include(pm => pm.PropertyParty)
.Include(pm => pm.PropertyParty)
.ThenInclude(x => x.Party)
.ThenInclude(x => x.PartyMailingAddress)
.ThenInclude(x => x.PropertyMailingAddress)
.Where(a => a.PropertyParty.Any(x => (x.Party.PartyMailingAddress.Any(z => z.PropertyMailingAddress.Any(h => h.Status == true))))).ToListAsync();
尝试使用 Entity Framework 的有效方法加上:
最后一行是否必须重新链接与上面的嵌套位置再次连接,或者下面可以吗?
var result = await db.Property.Include(pm => pm.PropertyParty)
.Include(pm => pm.PropertyParty)
.ThenInclude(x => x.Party)
.ThenInclude(x => x.PartyMailingAddress)
.ThenInclude(x => x.PropertyMailingAddress)
.IncludeFilter(y => y.PropertyMailingAddress.Where(z => z.Status == true)).ToListAsync();
*我们将要求所有嵌套实体,同时过滤,
目前正在使用 Net Core 2.2
您不能将 Include
与 IncludeFilter
混合使用。
在 EF Core 中,IncludeFilter
应该会自动添加所有路径。
我们没有 class 定义,因此很难确切知道关系,但查询应如下所示:
var result = await db.Property.IncludeFilter(pm => pm.PropertyParty
.Select(x => x.Party)
.SelectMany(x => x.PartyMailingAddress)
.SelectMany(x => x.PropertyMailingAddress.Where(z => z.Status == true)).ToListAsync();
过滤是在数据库中完成的。因此,请小心使用 EF Core 2.x,因为他们在 EF Core 3.x 中删除了客户端评估,这导致了一些问题。
如果您需要更多帮助,只需在我们的问题跟踪器中提供一个可运行的解决方案:https://github.com/zzzprojects/EntityFramework-Plus/issues
我正在尝试向下过滤三个子级别并仅查找 PropertyMailingAddress.Status== True.
的子元素如何将过滤器向下转换三级并使用 EntityFrameworkPlus IncludeFilter 进行嵌套过滤?什么是最有效的方法?
Class 结构是这样嵌套的:
- 属性
- 属性派对
- 聚会
- 派对邮寄地址
- 属性MailingAddress <--- Status 应该等于 true(任何 Status == False 的孙子 属性MailingAddress 节点,应该从这个嵌套的孙子分支中删除,保留属性MailingAddress 节点为 True)
原来的方法不行:
var result = await db.Property.Include(pm => pm.PropertyParty)
.Include(pm => pm.PropertyParty)
.ThenInclude(x => x.Party)
.ThenInclude(x => x.PartyMailingAddress)
.ThenInclude(x => x.PropertyMailingAddress)
.Where(a => a.PropertyParty.Any(x => (x.Party.PartyMailingAddress.Any(z => z.PropertyMailingAddress.Any(h => h.Status == true))))).ToListAsync();
尝试使用 Entity Framework 的有效方法加上: 最后一行是否必须重新链接与上面的嵌套位置再次连接,或者下面可以吗?
var result = await db.Property.Include(pm => pm.PropertyParty)
.Include(pm => pm.PropertyParty)
.ThenInclude(x => x.Party)
.ThenInclude(x => x.PartyMailingAddress)
.ThenInclude(x => x.PropertyMailingAddress)
.IncludeFilter(y => y.PropertyMailingAddress.Where(z => z.Status == true)).ToListAsync();
*我们将要求所有嵌套实体,同时过滤,
目前正在使用 Net Core 2.2
您不能将 Include
与 IncludeFilter
混合使用。
在 EF Core 中,IncludeFilter
应该会自动添加所有路径。
我们没有 class 定义,因此很难确切知道关系,但查询应如下所示:
var result = await db.Property.IncludeFilter(pm => pm.PropertyParty
.Select(x => x.Party)
.SelectMany(x => x.PartyMailingAddress)
.SelectMany(x => x.PropertyMailingAddress.Where(z => z.Status == true)).ToListAsync();
过滤是在数据库中完成的。因此,请小心使用 EF Core 2.x,因为他们在 EF Core 3.x 中删除了客户端评估,这导致了一些问题。
如果您需要更多帮助,只需在我们的问题跟踪器中提供一个可运行的解决方案:https://github.com/zzzprojects/EntityFramework-Plus/issues