日期:2014-05-20 浏览次数:21179 次
1 新建控制台应用程序GroupByExp,准备示例数据。
public class ExampleModel { public int C1 { get; set; }//列1 public string C2 { get; set; }//列2 } List<ExampleModel> listExampleModel = new List<ExampleModel>(); listExampleModel.Add(new ExampleModel() { C1 = 1, C2 = "b"}); listExampleModel.Add(new ExampleModel() { C1 = 1, C2 = "a"}); listExampleModel.Add(new ExampleModel() { C1 = 2, C2 = "a"}); listExampleModel.Add(new ExampleModel() { C1 = 2, C2 = "a"}); listExampleModel.Add(new ExampleModel() { C1 = 3, C2 = "c"}); listExampleModel.Add(new ExampleModel() { C1 = 4, C2 = "a"});
2 嵌套分组实现
通过Linq实现嵌套分组,分组包含两步:
(1)按照C1进行分组(得到下图左半部效果)
(2)再按照C2进行分组(得到下图右半部效果)
下面给出嵌套分组及结果输出的代码。
var exampleModelGroup = listExampleModel.GroupBy(it => it.C1).GroupBy(it => it.First().C2); List<ExampleModel> listResult = new List<ExampleModel>(); foreach (var group1 in exampleModelGroup) { foreach (var group2 in group1) { listResult.AddRange(group2.ToList()); } } foreach(var exampleModel in listResult) { Console.WriteLine("{ C1 = " + exampleModel.C1 + ", C2 = " + exampleModel.C2 + " }"); }
执行结果如下图所示。
3 分析说明
分组及结果输出的详细过程如下图所示。
嵌套分组操作中,我们要想获取最终分组中的成员信息的话,可以按照本文所述方法完成,本质上就是遍历。