group by子句返回的结果集跟我们之前的不大一样,我们之前返回的是IEnumerable的集合,但是,group by返回的是IGrouping<TKey, TElement>的结果集。
事实上,IGrouping也是继承了IEnumerable
public interface IGrouping<out TKey, out TElement> : IEnumerable<TElement>, IEnumerable
同时,正如我们在select子句中说过的,group子句是两外一个可以作为LINQ查询结束的子句。
举个例子,假设我们有如下品牌:
"Exuviance", "Avene", "Baby Quasar", "Ecoya", "Alterna", "Ecru New York"
我们想实现如下显示:
E:
Exuviance
Ecru New York
Ecoya
A:
Avene
Alterna
B:
Baby Quasar
可以建立以下查询:
string[] allBrands = new string[] { "Exuviance", "Avene", "Baby Quasar", "Ecoya", "Alterna", "Ecru New York" }; var brands = from brand in allBrands group brand by brand[0]; foreach (var brand in brands) { Console.WriteLine(brand.Key+":"); foreach (var item in brand) { Console.WriteLine(item); } Console.WriteLine(); }
在讲看完orderby子句后,我们会让显示按照key来升序排序,以更符合要求。
同时在介绍完into子句后,我们还会介绍如何对每个组执行附加操作。
参考:webcast 《跟我一起学Visual Studio 2008系列课程》