You need to enable JavaScript to run this app. 如何基于LINQ GroupBy按属性拆分List并获取单个属性值的子列表
优惠活动
大模型
产品
解决方案
定价
更多

如何基于LINQ GroupBy按属性拆分List并获取单个属性值的子列表

指定答题人答案列表的实现方案

结合你现有基于quemRespondeu字段做分组的逻辑,有两种适配不同场景的实现方式:

方式1:基于已有分组逻辑提取目标数据(适合需要反复查询多用户数据的场景)

如果你已经完成全量数据分组,后续还要多次调取不同答题人的数据,优先选这个方案:把全量分组结果缓存到内存,后续每次取数不需要重新遍历全量列表,整体查询效率更高。

// 替换为你实际需要查询的答题人ID值,注意类型需与quemRespondeu属性完全一致
var targetUserId = 123;
var targetUserAnswers = surveyAnswers.Respostas
    .GroupBy(x => x.quemRespondeu)
    // 匹配对应ID的分组,空值场景兜底返回空列表,避免空引用异常
    .FirstOrDefault(group => group.Key == targetUserId)?
    .ToList() ?? new List<SurveyAnswer>();

如果之前已经把全量分组的结果存在内存变量里,直接复用即可,不要重复跑GroupBy逻辑增加遍历开销:

// 你之前已经生成的分组结果
var groupedSurveyData = surveyAnswers.Respostas.GroupBy(x => x.quemRespondeu);
// 从已有分组结果直接取目标列表
var targetUserAnswers = groupedSurveyData
    .FirstOrDefault(group => group.Key == targetUserId)?
    .ToList() ?? new List<SurveyAnswer>();

方式2:直接条件筛选(适合仅查询单个/少量用户的场景,性能更优)

如果你只是临时查询某一个/极少几个答题人的数据,不需要拆分所有分组,选这个方案更划算:直接遍历全量数据筛出匹配项,省去全量分组的临时内存开销,当全量答卷数据量很大的时候,性能优势会非常明显。

var targetUserId = 123;
var targetUserAnswers = surveyAnswers.Respostas
    .Where(item => item.quemRespondeu == targetUserId)
    .ToList();

常见踩坑提示:匹配ID的时候一定要保证类型完全一致,比如quemRespondeu是Guid类型就传入对应Guid值,是字符串就传字符串,否则会出现匹配不到、返回空列表的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 07:06:08