【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第三章 (LINQ TO Objects) 第一节

LINQ到Objects

LINQ到Objects介绍

示例 3-1. 一个LINQ到Objects查询的示例。

string [] presidents  =  {
    " Adams " " Arthur " " Buchanan " " Bush " " Carter " " Cleveland " ,
    " Clinton " " Coolidge " " Eisenhower " " Fillmore " " Ford " " Garfield " ,
    " Grant " " Harding " " Harrison " " Hayes " " Hoover " " Jackson " ,
    " Jefferson " " Johnson " " Kennedy " " Lincoln " " Madison " " McKinley " ,
    " Monroe " " Nixon " " Pierce " " Polk " " Reagan " " Roosevelt " " Taft " ,
    " Taylor " " Truman " " Tyler " " Van Buren " " Washington " " Wilson " };
string  president  =  presidents.Where(p  =>  p.StartsWith( " Lin " )).First();
Console.WriteLine(president);

 

注意:这段代码是运行在Visual Studio 2008 控制台应用程序下的。

示例 3-1 展示了,LINQ到Objects 是所有关于 —— 在内存中数据集合和数组中执行 SQL-Like查询。

LINQ 到对象是所有关于 — 对内存中的数据集合和数组执行类似于 SQL 查询

运行结果如下:

Lincoln

LINQ到Objects概述

什么使的LINQ很酷并使用起来很方便?其中一部分是它无缝集成在C#语言中的方法。你可以根据你的使用习惯,或预先存在的类,例如像Collections1、数组,来使用LINQ得到它给你带来的好处,因为它不是在 form 后 Classes 的一个全新的字符转换。意思是你可以几乎或者不修改现有的代码就可以得到LINQ查询。LINQ to Objects(LINQ 到 Objects)功能是实现了IEnumerable<T>接口,序列,和标准查询操作。

例如:如果你有一个Int类型的数组并要对它排序,你可以执行一个LINQ查询来排序结果,就像写一个SQL查询一样。

大概你拥有的是一个存有Customer对象的ArrayList并要查找一个Customer对象。如果是这样的,LINQ to Objects(LINQ 到 Objects)将给你答案。

1.一个必须实现IEnumerable<T> 或者 IEnumerable 的集合才可以使用LINQ查询。

IEnumerable<T>,序列,标准查询操作

IEnumerable<T>,枚举 T 是一个C# 2.0 泛型集合所有类的实现接口,就像数组。 此接口允许一个集合的元素的枚举。

序列是实现了IEnumerable<T>接口的集合的逻辑术语。如果你有一个 IEnumerable<T> 类型的变量,然后你可能说你有了一个T的序列。例如,如果你有一个string的IEnumerable ,写成IEnumerable<string>,你可以说你有一个string序列。

注意,任何变量声明成 IEnumerable<T> 的类型 T ,就认为它是一个类型 T 的序列。

在System.Linq.Enumerable中大多数标准查询操作是静态类的扩展方法,并且是以一个IEnumerable<T>作为第一个参数原型。因为它们是扩展方法,使用扩展方法允许语法能更好的对 IEnumerable <T> 类型的变量调用,而不是传递类型 IEnumerable <T> 的变量作为第一个参数来调用它们。

System.Linq.Enumerable 类的标准查询操作的非扩展方法是静态方法,并且必须调用 System.Linq.Enumerable 类。组合这些标准查询操作方法,使你能对一个 IEnumerable<T>  序列执行复合数据查询。

在C#2.0之前现存的这些非泛型集合,支持 IEnumerable 接口,不是 IEnumerable<T> 接口。这意味着你不能直接用旧的集合来调用这些第一个参数是一个 IEnumerable<T> 的扩展方法。然而,你仍然可以在旧的集合上执行LINQ查询,可以通过调用Cast或者OfType标准查询操作,生成一个实现 IEnumerable<T> 的序列,因此允许你访问完整的标准查询操作。

注意:C#中非泛型集合(旧的集合),使用 Cast 或者 OfType 操作来执行LINQ查询。

若要得到通过 标准查询运算,在你的代码中添加 using System.Linq; 引用,如果不存在。你不必添加程序集引用,因为Visual Studio 2008 自动添加 System.Core.dll 程序集到你的项目中,所以代码包含 using System.Linq; 引用代码。

剩下内容请关注后面章节。

你可能感兴趣的:(【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第三章 (LINQ TO Objects) 第一节)