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

如何使用Linq对数据库获取的列表进行分组?

当然可以用LINQ实现!

完全不用写复杂的foreach循环来手动排序和判断分组,LINQ的GroupBy方法正好能帮你轻松搞定这个需求,代码简洁又易读。

假设你原来的数据项是这样的类(如果是匿名对象也一样适用):

public class OriginalItem
{
    public int Id { get; set; }
    public string Value { get; set; }
}

直接用下面的LINQ代码就能得到你想要的分组结果:

// 模拟从数据库获取的原始列表
List<OriginalItem> originalList = new List<OriginalItem>
{
    new OriginalItem { Id = 1, Value = "a" },
    new OriginalItem { Id = 1, Value = "b" },
    new OriginalItem { Id = 1, Value = "c" },
    new OriginalItem { Id = 2, Value = "t" }
};

// 分组转换
var groupedResult = originalList
    .GroupBy(item => item.Id) // 按Id分组,相同Id的项会被归为一组
    .Select(group => new 
    {
        Id = group.Key, // 组的Key就是对应的Id
        Values = group.Select(item => item.Value).ToList() // 收集组内所有Value成列表
    })
    .ToList();

关键步骤解释:

  1. GroupBy(item => item.Id):自动将原始列表按Id分组,每个分组会包含所有相同Id的OriginalItem对象,分组的Key就是该组的Id值。
  2. Select(...):把每个分组转换成你需要的结构——用分组的Key作为新对象的Id,再把分组里所有项的Value提取出来组成一个列表作为Values。

如果需要把结果绑定到强类型对象(而不是匿名类型),只要定义对应的结果类,在Select里实例化它就行:

public class GroupedResult
{
    public int Id { get; set; }
    public List<string> Values { get; set; }
}

// 转换时换成强类型
var groupedResult = originalList
    .GroupBy(item => item.Id)
    .Select(group => new GroupedResult
    {
        Id = group.Key,
        Values = group.Select(item => item.Value).ToList()
    })
    .ToList();

这样一行链式调用就完成了分组转换,比你原来的foreach逻辑简洁太多,可读性也更强~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:39:28