You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Linq中对IEnumerable类型问卷数据按GroupBy分组并操作

用Linq GroupBy处理问卷分组数据

1. 先明确实体类和数据示例

假设你的问卷问题实体类结构如下:

public class Question
{
    public int Id { get; set; }
    public string Content { get; set; }
    public string GroupByField { get; set; } // 用于分组的字段,比如"个人信息""偏好设置"
    public string QuestionType { get; set; } // 问题类型,比如单选、多选
}

从JSON反序列化后得到的问卷数据列表示例:

var questions = new List<Question>
{
    new Question { Id = 1, Content = "你的年龄?", GroupByField = "个人信息", QuestionType = "单选" },
    new Question { Id = 2, Content = "你的职业?", GroupByField = "个人信息", QuestionType = "单选" },
    new Question { Id = 3, Content = "你常用的APP?", GroupByField = "偏好设置", QuestionType = "多选" },
    new Question { Id = 4, Content = "你喜欢的内容类型?", GroupByField = "偏好设置", QuestionType = "多选" },
    new Question { Id = 5, Content = "你的性别?", GroupByField = "个人信息", QuestionType = "单选" }
};

2. 用GroupBy进行分组

Linq的GroupBy方法可以直接按指定字段分组,返回的集合中每个元素是一个分组,包含分组键和该组下的所有问题:

// 按GroupByField字段完成分组
var groupedQuestions = questions.GroupBy(q => q.GroupByField);

3. 遍历分组并展示内容

分组后用foreach遍历,输出每个分组的名称及下属问题:

foreach (var group in groupedQuestions)
{
    Console.WriteLine($"--- 分组:{group.Key} ---");
    // 遍历当前分组下的所有问题
    foreach (var question in group)
    {
        Console.WriteLine($"问题{question.Id}:{question.Content}(类型:{question.QuestionType})");
    }
    Console.WriteLine();
}

运行后输出结果:

--- 分组:个人信息 ---
问题1:你的年龄?(类型:单选)
问题2:你的职业?(类型:单选)
问题5:你的性别?(类型:单选)

--- 分组:偏好设置 ---
问题3:你常用的APP?(类型:多选)
问题4:你喜欢的内容类型?(类型:多选)

4. 对分组内的问题进行操作

分组后还能针对每组数据做各种Linq操作,举几个常用场景:

  • 统计每组问题数量:
var groupCount = groupedQuestions.Select(g => new 
{
    GroupName = g.Key,
    QuestionCount = g.Count()
});
// 输出统计结果
foreach (var item in groupCount)
{
    Console.WriteLine($"分组「{item.GroupName}」共有{item.QuestionCount}个问题");
}
  • 筛选分组内的特定类型问题:
    比如只保留每组里的单选问题:
var singleChoiceGroups = groupedQuestions.Select(g => new 
{
    GroupName = g.Key,
    SingleChoiceQuestions = g.Where(q => q.QuestionType == "单选").ToList()
});
  • 对分组内的问题按ID排序:
var sortedGroups = groupedQuestions.Select(g => new 
{
    GroupName = g.Key,
    SortedQuestions = g.OrderBy(q => q.Id).ToList()
});

注意点

  • 如果你的原始数据是JSON字符串,需要先用JsonSerializer(System.Text.Json)或Newtonsoft.Json反序列化成List<Question>,才能用Linq操作。
  • GroupBy返回的是IGrouping<TKey, TElement>类型,每个分组的Key就是你用来分组的字段值,分组本身可直接遍历获取内部元素。

内容的提问来源于stack exchange,提问作者Venkat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 01:25:21