LINQ查询特定组

时间:2018-12-13 01:13:44

标签: sql linq

我有一个如下所示的数据列表。

GroupId   Color
---------
1        Blue
1        Red
2        Green
2        Blue
3        White
3        Red
3        Yellow
4        Blue
4        Red

我正在尝试编写一个LINQ查询,该查询可用于过滤此集合,使其可以为以下问题提供答案。

给我一​​个或多个颜色为蓝色和红色的组。 该问题的答案将是ID为1和4的列表。

即使答案是蓝色,答案也不会包含2。匹配项必须准确匹配蓝色和红色。

2 个答案:

答案 0 :(得分:1)

            var result = list.GroupBy(item => item.GroupdId)
            .Where(x=>x.All(y=>y.Color=="Blue" || y.Color=="Red")).Select(x=>x.Key).ToList();

这应该返回您想要的答案。

首先按groupid对项目进行分组,然后查找仅包含“蓝色”或“红色”的所有组,然后在列表中返回组ID。

答案 1 :(得分:0)

这是通用解决方案。

var checkColors = new[] { "Blue", "Red" };

var gp = from d in definitions
         group d by d.GroupId
         into g
         let colorNames = g.Select(dim => dim.Color)
         where g.Any(gd => !checkColors.Except(colorNames).Any())
         select g.Key;