日期:2014-05-20  浏览次数:21119 次

Linq嵌套分组实例

新建控制台应用程序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"});

嵌套分组实现

通过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 + " }");
}

执行结果如下图所示。

 

分析说明

分组及结果输出的详细过程如下图所示。

嵌套分组操作中,我们要想获取最终分组中的成员信息的话,可以按照本文所述方法完成,本质上就是遍历。