Linq分组统计问题:如何在结果中包含描述字段
解决方案
你的问题在于原代码仅按Name分组,且未从分组中提取Description字段。根据示例数据,同一Name对应的Description完全一致,这里提供两种实现方式:
方式一:按Name分组,提取组内统一的Description
如果可以确定同一Name的Description始终相同,直接从分组中取任意元素的Description即可:
public void GetList() { List<(string Name, string Description)> itemlist = new List<(string Name, string Description)>(); // 数据添加部分保持不变 itemlist.Add(("Apple", "ABCDED")); itemlist.Add(("Pear", "KLMAN")); itemlist.Add(("Apple", "ABCDED")); itemlist.Add(("Peach", "EFGHI")); itemlist.Add(("Apple", "ABCDED")); itemlist.Add(("Peach", "EFGHI")); itemlist.Add(("Apple", "ABCDED")); itemlist.Add(("Banana", "MNOPQ")); itemlist.Add(("Cherry", "PQRST")); itemlist.Add(("Peach", "EFGHI")); itemlist.Add(("Banana", "MNOPQ")); itemlist.Add(("Pear", "KLMAN")); itemlist.Add(("Apple", "ABCDED")); // 修改分组后的Select逻辑,添加Description字段 var newlist = itemlist .GroupBy(i => i.Name) .Select(group => new { Name = group.Key, Count = group.Count(), Description = group.First().Description // 取组内第一个元素的Description }) .ToList(); // 打印包含三个字段的结果 foreach (var item in newlist) { Debug.Print($"{item.Name} {item.Count} {item.Description}"); } }
方式二:按(Name, Description)组合分组(更严谨)
如果存在同一Name对应不同Description的场景,按组合字段分组能确保计数准确:
public void GetList() { List<(string Name, string Description)> itemlist = new List<(string Name, string Description)>(); // 数据添加部分保持不变 itemlist.Add(("Apple", "ABCDED")); itemlist.Add(("Pear", "KLMAN")); itemlist.Add(("Apple", "ABCDED")); itemlist.Add(("Peach", "EFGHI")); itemlist.Add(("Apple", "ABCDED")); itemlist.Add(("Peach", "EFGHI")); itemlist.Add(("Apple", "ABCDED")); itemlist.Add(("Banana", "MNOPQ")); itemlist.Add(("Cherry", "PQRST")); itemlist.Add(("Peach", "EFGHI")); itemlist.Add(("Banana", "MNOPQ")); itemlist.Add(("Pear", "KLMAN")); itemlist.Add(("Apple", "ABCDED")); // 按Name和Description的组合分组 var newlist = itemlist .GroupBy(i => new { i.Name, i.Description }) .Select(group => new { group.Key.Name, Count = group.Count(), group.Key.Description }) .ToList(); // 打印结果 foreach (var item in newlist) { Debug.Print($"{item.Name} {item.Count} {item.Description}"); } }
输出结果(两种方式在示例数据下一致)
运行后会输出:
Apple 5 ABCDED Pear 2 KLMAN Peach 3 EFGHI Banana 2 MNOPQ Cherry 1 PQRST
内容的提问来源于stack exchange,提问作者Jlong101
相关产品推荐
相关产品推荐

