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

本文介绍了LINQ到Objects的基本概念及使用方法,演示了如何在内存中的数据集合和数组上执行类似SQL的查询。通过示例展示了如何筛选特定数据。

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; 引用代码。

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

转载于:https://www.cnblogs.com/winnerzone/archive/2008/04/04/1136999.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值