C# LINQ分组查询问题:如何找出不含Server A的名称组并返回对应项
解决分组中不存在Server A的筛选问题
你的代码问题出在GroupBy的处理逻辑上:你在分组时直接过滤出了每个分组里server="A"的元素,导致没有Server A的分组变成了空序列,后续调用FirstOrDefault()自然返回null。
修改后的代码如下:
var list = new[] { new { name = "object1", server="A"}, new { name = "object1", server="B"}, new { name = "object2", server="B"}, new { name = "object2", server="C"}, new { name = "object3", server="B"}, new { name = "object3", server="A"}, new { name = "object4", server="C"}, }; var selectServerANotPresent = list .GroupBy(g => g.name) .Where(group => !group.Any(item => item.server == "A")) .Select(group => group.First()) .ToList(); System.Diagnostics.Debug.WriteLine(string.Join("\r\n", selectServerANotPresent));
修改说明:
- 调整分组逻辑:直接按
name分组,保留每个分组的所有元素,不再提前过滤Server A的条目; - 筛选目标分组:用
!group.Any(item => item.server == "A")判断分组中是否不存在Server A的元素,筛选出符合条件的分组; - 提取结果:对每个符合条件的分组调用
First(),获取该分组的第一个元素,得到预期的输出结果。
运行后会输出:
{ name = object2, server = B } { name = object4, server = C }
内容的提问来源于stack exchange,提问作者Syntax_MM
相关产品推荐
相关产品推荐

