4.group子句
根据语法的规定,LINQ表达式必须以from子句开头,以select或group子句结束,所以除了使用select来返回结果外,也可以使用group子句来返回元素分组后的结果。
group子句返回的是一个基于IGrouping<TKey,TElement>泛型接口的对象序列。
语法和SQL的group有点区别,不注意的话可能会写错。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LINQ_group
{
/// <summary>
/// LINQ group子句
/// </summary>
class Program
{
static void Main(string[] args)
{
List<GustInfo> gList = new List<GustInfo>()
{
new GustInfo(){ Name="DebugLZQ",Age=26,Tel="187********"},
new GustInfo(){ Name="Sarah",Age=25,Tel="159********"},
new GustInfo(){ Name="Jerry",Age=35,Tel="135********"},
new GustInfo(){ Name="M&M",Age=16,Tel="136********"},
new GustInfo(){ Name="DebugMan",Age=26,Tel="136********"},
new GustInfo(){ Name="Jerry&Tom",Age=19,Tel="136********"},
};
var query = from guest in gList
group guest by guest.Name.Substring(0, 1);//分组键key是string类型
//遍历键值和键值所属元素
foreach (IGrouping<string, GustInfo> guestGroup in query)
{
Console.WriteLine("分组键:{0}",guestGroup.Key );
foreach (var g in guestGroup)
{
Console.WriteLine("{0} 年龄:{1} 电话:{2}",g.Name,g.Age,g.Tel );
}
}
Console.ReadKey(false);
Console.WriteLine("-----------------------------------");
var query2 = from guest in gList
group guest by guest.Age > 20;//分组键key是bool类型表达式的结果
foreach (IGrouping<bool, GustInfo> guestGroup in query2)
{
Console.WriteLine("年龄是否大于20 分组键:{0}", guestGroup.Key);
foreach (var g in guestGroup)
{
Console.WriteLine("{0} 年龄:{1} 电话:{2}", g.Name, g.Age, g.Tel);
}
}
Console.ReadKey(false);
}
}
}
程序的运行结果如下:
5.into子句
into子句作为一个临时标识符,用于group、select、join子句中充当其结果的引用。











