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

时间:2016-01-05 19:06:40

标签: 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具有数组中的所有subId。如果这可能是一个很好的查询,但它不是一个要求。

1 个答案:

答案 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个元素gi.SubId等于id {1}}。