Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 特定组的LINQ查询_Sql_Linq - Fatal编程技术网

Sql 特定组的LINQ查询

Sql 特定组的LINQ查询,sql,linq,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的列表 即使答案中有

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

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。比赛必须精确到蓝色和红色

            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。

以下是通用解决方案

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;

你能发布你到目前为止尝试过的东西吗?如果gorup有一种除了蓝色或红色以外的其他颜色,这将失败