Linq学习总结(7)——分组

LINQ的分组功能是通过group by子句实现的。

group by的结果是存在一个IGrouping对象中的,含有一个Key/Element对。Key代表的是进行分组的凭据,而Element则是我们需要的数据。

static void Main(string[] args)
{
    var nums = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    var result = from n in nums group n by n % 2;

    foreach (var item in result)
    {
        Console.WriteLine(item.Key == 0 ? "偶数" : "奇数");

        foreach (var num in item)
        {
            Console.WriteLine(num);
        }
    }
}

group by关键字的使用实际是调用的GroupBy扩展方法,它有很多个重载的方法。此外它还有个GroupJoin这个扩展方法。关于它们的使用都可以上MSDN查看一下。

另外,还有一个扩展方法ToLookup也支持分组,它会创建一个带有键值对的Dictionary。通过Dictionary,你就可以获得一个键值对,而ToLookup所返回的键值对中,值部分本身又是一个对象集合。

static void Main(string[] args)
{
    var students = new[]{
        new {name="Lily",age=12},
        new {name="Lucy",age=13},
        new {name="Hank",age=12},
        new {name="Toby",age=13},
        new {name="Jack",age=15}
    };

    var groupByAge = students.ToLookup(
        n => n.age,
        m=>m.name
        );

    foreach (var group in groupByAge)
    {
        Console.WriteLine(group.Key);
        foreach (var item in group)
        {
            Console.WriteLine("{0,6}",item);
        }
    }
}
原文地址:https://www.cnblogs.com/heqichang/p/2129909.html