C# 第一个LINQ 查询

我们将先介绍一个示例,这个示例使用 LINQ 创建了一个查询,以便在一个简单的内存对象数组中查找一些数据,并输出到控制台上。

试一试:第一个 LINQ 程序:按照下面的步骤在 Visual Studio 中创建示例: .

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

(3)在 Program.cs 的 Main() 方法中添加如下代码:

static void Main(string[] args) {            string[] names = { "Alonso",  "Zheng",  "Smith",  "Jones",  "Smythe","Small",  "Ruiz",  "Hsieh",  "Jorgenson",  "Ilyich",  "Singh",  "Samba",  "Fatimah" };

           var queryResults =               from n in names               where n.StartsWith("S")                select n;                          Console.WriteLine("Names beginning with S:");                      foreach (var item in queryResults) {                Console.WriteLine(item);            }                      Console.Write("Program finished, press Enter/Return to continue:");            Console.ReadLine();}

(4) 编译并运行程序(按下 F5 键即可开始调试),列表中的名称以 S 开头,按照它们在数组中的声明顺序排列,如下所示。

Names beginning with S: Smith  Smythe Small Singh SambaProgram finished, press Enter/Return to continue:

按下回车键,结束程序,关闭控制台屏幕。如果使用 Ctrl+F5 组合键(启动时不使用调试功能),就需要按下回车键两次,这会结束程序的运行。

示例的说明

第一步是引用 System.Linq 名称空间,这在创建项目时由 Visual Studio  自动完成:

using System.Ling;

所有的基本底层系统都支持 System.Linq 名称空间中用于 LINQ 的类。如果在Visual 之外部创建 C# 源文件或编辑以前版本创建的项目,就必须手动添加 using System.Linq 指令。

下一步创建一些数据,在本例中就是声明并初始化 names 数组:​​​​​​​

string[] names = { "Alonso",  "Zheng",  "Smith",  "Jones",  "Smythe",  "Small","Ruiz",  "Hsieh",  "Jorgenson",  "Ilyich",  "Singh",  "Samba",  "Fatimah" };

这些数据很少,很适合用于查询结果比较明显的示例。程序的下一部分是真正的 LINQ 查询语句:​​​​​​​

var queryResults =                 from n in names                 where n.StartsWith("S")                  select n;

这是一个看起来比较古怪的语句。它不像是C#语言,实际上 from.….where….select 语法类似于 SQL 数据库查询语言。但这个语句不是 SQL,而是 C#,在 VS中输入这些代码时,from、where 和 select会突出显示为关键字,这个古怪的语法对编译器而言是完全正确的。

这个程序中的 LINQ 查询语句使用了 LINQ 声明性查询语法:​​​​​​​

var queryResults =   from n in names   where n.StartsWith("S")    select n;

该语句包括4个部分:以 var 开头的结果变量声明,使用查询表达式给该结果变量赋值,查询表达式包含 from 子句、where 子句和 select 子句。