LINQ到Objects
LINQ到Objects介绍
示例 3-1. 一个LINQ到Objects查询的示例。
注意:这段代码是运行在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; 引用代码。
剩下内容请关注后面章节。