用于获取与 ID 数组的所有项目匹配的项目的 LINQ 查询

标签 linq postgresql

我有一个外部传递的 ID 数组传递给我的方法。

任务:

  • 表 A 包含组 ID 和子 ID 等
  • A表每行一个子ID
  • A表每行一个组ID
  • 通常有多行具有匹配的组 ID 但具有不同的子 ID
  • 我想获取组合后具有外部传递的 ID 数组中所有子 ID 的组条目。

到目前为止我的查询:

var externallyPassedArrayOfIds = [1, 2, 3]; 

var members = db.TableA
            .Where(u => externallyPassedArrayOfIds.Contains(u.SubId))
            .GroupBy(u => u.GroupId)
            .ToList();

数据库中可能包含哪些内容以及将选择哪些内容的示例(按组 ID 排序只是为了便于理解):

ID | GroupId | SubId
---------------------
1    1         4
2    1         1
3    2         1
4    2         2
5    2         4
6    2         5
7    3         1
8    3         2
9    3         3
10   3         4
11   4         1
12   4         2
13   4         3

在此示例中,它将返回行 7、8、9、11、12、13,因为只有组 ID 3 和 4 具有数组中的所有子 ID。如果这是一个很好的查询,但这不是必需的。

最佳答案

如果您想要包含 all externallyPassedArrayOfIds 的项目,请使用 All 检查组的此条件,而不是单个项目:

var members = db.TableA
    .GroupBy(u => u.GroupId)
    .Where(g => externallyPassedArrayOfIds.All(id => g.Any(i => i.SubId == id)))
    .ToList();

Where 子句适用于整个组。它说该组必须是 externallyPassedArrayOfIds 的每个元素 id 至少有一个 igi.SubId 等于 id

关于用于获取与 ID 数组的所有项目匹配的项目的 LINQ 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34619400/

相关文章:

mysql - 尝试连接三个表以获得特定结果

c# - 如何序列化一个 ViewState 对象

linq - 如何使用 LINQ 对数据进行分层分组?

entity-framework - f#:LINQ to Entities 中仅支持无参数构造函数和初始值设定项

regex - PostgreSQL,用于将文本字段与数值匹配的正则表达式

postgresql - 如何在 VS2010 Pro 的实体数据模型向导中将数据源更改为 PostgreSQL

c# - 如何使用 Linq 从列表列表创建查找?

c# - 当行具有空值时, Entity Framework 返回空对象

postgresql - 无法删除索引,因为唯一约束需要它 (postgres)

sql - 将文件插入 Postgres 数据库