我有一个传递给我的方法的外部传递的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具有数组中的所有subId。如果这可能是一个很好的查询,但它不是一个要求。
答案 0 :(得分:1)
如果您想要包含所有 externallyPassedArrayOfIds
的项目,请使用All
检查论坛上的这种情况,而不是单个项目:
var members = db.TableA
.GroupBy(u => u.GroupId)
.Where(g => externallyPassedArrayOfIds.All(id => g.Any(i => i.SubId == id)))
.ToList();
Where
子句适用于整个组。它表示该组必须是这样的:对于id
的每个元素externallyPassedArrayOfIds
,至少有一个i
个元素g
,i.SubId
等于id
{1}}。