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

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

下面依此总结这8个关键字的常用查询语句写法。

 

1.from子句
如果要写一个LINQ表达式,就必须是以from子句开头。个人觉得from子句中需要注意的地方就是多个from子句的书写。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace LINQ
{
  /// <summary>
  /// LINQ,重点是感悟from子句中的查询变量的灵活
  /// </summary>
  class Program
  {
    static void Main(string[] args)
    {
      //1单个form子句
      string[] values = { "LINQ学习","LINQ基本语句","from子句","单个from子句"};
      var value = from v in values
            where v.IndexOf("LINQ") > -1
            select new { v, v.Length };
      foreach (var n in value)
      {
        Console.WriteLine("{0},{1}",n.v,n.Length );
      }
      Console.ReadKey(false);
      //2使用LINQ查询ArrayList
      ArrayList gList = new ArrayList();
      gList.Add(new GustInfo { Name="DebugLZQ", Age=26, Tel="88888888"});
      gList.Add(new GustInfo { Name="博客园",Age=6, Tel ="666666"});
      gList.Add(new GustInfo { Name = "M&MSoft", Age =9, Tel = "55555" });

      var query = from GustInfo gust in gList
            where gust.Age > 9
            select gust;//范围变量gust制定了数据类型
      foreach (GustInfo g in query)
      {
        Console.WriteLine("{0} 年龄:{1} 电话:{2}",g.Name,g.Age,g.Tel );
      }
      Console.ReadKey(false);
      //3复合from子句
      List<GustInfo2> gList2 = new List<GustInfo2>() 
      {
        new GustInfo2{ Name="DebugLZQ",Age=26,TelTable=new List<string>(){"8888888","138******"}},
        new GustInfo2{ Name="博客园",Age=6,TelTable =new List<string>(){"666666","138******"}},
        new GustInfo2{ Name="M&MSoft",Age=9,TelTable=new List<string>(){"55555","138******"}}
      };

      //gust、tel都是查询变量,作用域为当前查询语句!!!
      var query2 = from gust in gList2
             from tel in gust.TelTable 
             where tel.IndexOf("5555") > -1
             select gust;
      foreach (var g in query2)
      {
        Console.WriteLine("{0} 年龄{1}",g.Name,g.Age );
        foreach (var t in g.TelTable)
        {
          Console.WriteLine("电话:{0}",t);
        }
      }

      Console.ReadKey(false);

      //4多个from子句
      var query3 = from GustInfo gust in gList
             where gust.Age > 6
             from GustInfo2 gust2 in gList2
             where gust2.Age> 9
             select new { gust, gust2 };//查询结果定制
      foreach (var g in query3)
      {
        Console.WriteLine("{0} {1}", g.gust.Name, g.gust2.Name);
      }

      Console.ReadKey(false);
    }
  }
}