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); } } }