EF Core:根据父数据过滤子数据

问题描述 投票:0回答:1

考虑以下因素:

我有一个包含父母和孩子的数据库。父表和子表都有一个名为“类型”的列。每个父母都有数百个孩子。我提前知道我感兴趣的子“类型”值,但这取决于父“类型”值。

所以基本上我想创建一个像这样的构造并将其作为 SQL 的一部分运行。

  var myQueryDatas = new[] {
   new QueryData(){ParentType=1, NeedsChildTypes=new[]{101,142,105}}
   new QueryData(){ParentType=2, NeedsChildTypes=new[]{106,110,120,232}};

我想从数据库中获取具有填充子集合的父实例,但仅填充满足条件的子集合。为每个父母获取所有孩子会产生大量内存占用。

我尝试过字典、数组和元组。我怀疑可以使用存储过程或预先在数据库中创建查询数据然后使用某种表连接来解决这个问题。但是,我想避免这两件事。父类型的特定子类型可能会因情况而异,因此最好从 C# 代码构造 SQL。

EF Core LINQ 提供程序是否接受任何类型的条件集合?

c# entity-framework-core
1个回答
0
投票

您需要按以下方式过滤

Include

var query = context.Parent
    .AsSplitQuery()
    .Include(p => p.Children
        .Where(c => 
            p.ParentType == 1 ? new[]{101,142,105}.Contains(c.Type) : 
            p.ParentType == 2 ? new[]{106,110,120,232}.Contains(c.Type) : false
            )
    );
© www.soinside.com 2019 - 2024. All rights reserved.