如何使用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();
关键步骤解释:
GroupBy(item => item.Id):自动将原始列表按Id分组,每个分组会包含所有相同Id的OriginalItem对象,分组的Key就是该组的Id值。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
相关产品推荐
相关产品推荐

