我有一个外部传递的 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
至少有一个 i
组 g
的 i.SubId
等于 id
。
关于用于获取与 ID 数组的所有项目匹配的项目的 LINQ 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34619400/