C#使用LINQ查询表达式的基本子句总结

2019-12-30 11:38:40王旭

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

程序的运行结果如下:

C#使用LINQ查询表达式的基本子句总结

5.into子句
 into子句作为一个临时标识符,用于group、select、join子句中充当其结果的引用。