介绍 LINQ

Language-Integrated Query (LINQ,语言集成查询)是下一代.NET 数据访问技术,它借鉴了很多函数编程的概念,因此,它非常适合 F#。

本质上,LINQ 是一组处理集合的库,它实现操作IEnumerable<T> 接口,在这方面,非常像 F# 的序列(Seq)模块,我们在第七章中讨论过。其核心是通过这些库查询在内存中的集合,它可以是数据库,也可以 XML 文件,还可以是从其他 API 返回的对象。

虽然我们熟悉在 LINQ 库实现的概念,但是,还是与基于 SQL 的命名约定有稍许不同。例如,与Seq.map 等价的叫 Sequence.Select,与 Seq.filter 等价的叫 Sequence.Where。下面的例子演示了如何使用这个类库,第一步是把由 LINQ 库公开的方法导入,形成更可用的形式:

module Strangelights.LinqImports

open System

open System.Linq

open System.Reflection

//define easier access to LINQ methods

let select f s =
Enumerable.Select(s, new
Func<_,_>(f))

let where f s =
Enumerable.Where(s, new
Func<_,_>(f))

let groupBy f s =
Enumerable.GroupBy(s, new
Func<_,_>(f))

let orderBy f s =
Enumerable.OrderBy(s, new
Func<_,_>(f))

let count s =
Enumerable.Count(s)

这些函数一旦导入,就很容易使用,特别是向前管道(|>)运算符。下面的例子这演示这种用法,它使用 LINQ 库查询字符串类,并按照它的非静态方法的重载进行分组:

open System

openStrangelights.LinqImports

//query string methods using functions

let namesByFunction =

(typeof<string>).GetMethods()

|> where (fun m
-> not m.IsStatic)

|> groupBy (fun m
-> m.Name)

|> select (fun m
-> m.Key, count m)

|> orderBy (fun (_, m)
-> m)

//print out the data we‘ve retrieved from about the string class

namesByFunction

|>Seq.iter (fun (name, count)
-> printfn "%s - %i" name count)

运行结果如下:

ToLowerInvariant - 1

TrimEnd - 1

GetHashCode - 1

TrimStart - 1

GetEnumerator - 1

GetType - 1

GetTypeCode - 1

ToUpperInvariant - 1

Clone - 1

CopyTo - 1

get_Length - 1

Insert - 1

get_Chars - 1

PadLeft - 2

CompareTo - 2

PadRight - 2

ToUpper - 2

ToLower - 2

ToString - 2

Trim - 2

Remove - 2

ToCharArray - 2

Substring - 2

IsNormalized – 2

Normalize - 2

Replace - 2

IndexOfAny - 3

EndsWith - 3

Equals - 3

StartsWith - 3

LastIndexOfAny - 3

Split - 6

LastIndexOf - 9

IndexOf – 9

介绍 LINQ

时间: 2024-08-01 22:47:07

介绍 LINQ的相关文章

LINQ:介绍 LINQ(目录)

介绍 LINQ(目录) 语言集成查询 (LINQ) 是 Visual Studio 2008 和 .NET Framework 3.5 版中引入的一项创新功能. 传统上,针对数据的查询都是以简单的字符串表示,而没有编译时类型检查或 IntelliSense 支持. 此外,您还必须针对以下各种数据源学习一种不同的查询语言:SQL 数据库.XML 文档.各种 Web 服务等等. 通过LINQ, 您可以使用语言关键字和熟悉的运算符针对强类型化对象集合编写查询. 在 Visual Studio 中,可以

LINQ:开始使用 LINQ(一)- 介绍 LINQ 查询

开始使用 LINQ (一)- 介绍 LINQ 查询 查询是一种从数据源检索数据的表达式. 随着时间的推移,人们已经为各种数据源开发了不同的语言:例如,用于关系数据库的 SQL 和用于 XML 的 XQuery. 因此,开发人员不得不针对他们必须支持的每种数据源或数据格式而学习新的查询语言. LINQ 通过提供一种跨数据源和数据格式使用数据的一致模型,简化了这一情况.在 LINQ 查询中,始终会用到对象.可以使用相同的编码模式来查询和转换 XML 文档.SQL 数据库.ADO.NET 数据集..N

LinQ开篇介绍

语言集成查询(LINQ)是 Visual Studio2008中引入的一组功能.可为 C# 和 Visual Basic 语言语法提供强大的查询功能. LINQ引入了标准易学的数据查询和更新模式,可以扩展该方法来支持任何类型的数据存储. Visual Studio 包括 LINQ 提供程序集,后者支持将 LINQ 与.NET Framework 集合.SQL Server 数据库.ADO.NET 数据集和 XML 文档结合使用. 在LINQ查询中,可以使用相同的基本编码模式来查询和转换xml文档

LINQ To SQL 语法及实例大全

LINQ to SQL语句(1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句. Where操作包括3种形式,分别为简单形式.关系条件形式.First()形式.下面分别用实例举例下: 1.简单形式: 例如:使用where筛选在伦敦的客户 var q = from c in db.Customers where c.City == "London" select c

linq group join

本篇介绍Linq的Group和Join操作,继续使用<Linq 学习(3) 语法结构>中介绍的数据源. GroupGroup是进行分组操作,同SQL中的Group By类似.原型如下: public static IEnumerable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(     this IEnumerable<TSource> source,     Func<TSourc

LINQ to XML 编程基础

1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: 隐藏行号 复制代码 ?创建 XML public static void CreateDocument() { string path = @"d:\website"; XDocument xdoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), new XEle

七夕之Linq

今天七夕,可我只有一个人. 前天喜欢的女生生日,我准备了很久,可最后却什么也没做.我若去找她,她肯定不会快乐. 今天七夕,还是什么也没说.我知道,语言都是苍白的. 突然感觉深深的无力. 还是再写一篇吧,写啥好呢,想了半天,就Linq了,很配七夕. 其实我也不知道为啥配. Linq是c#设计者们在c#3.0中新添加的语法:查询表达式.使用查询表达式,很多标准查询操作符都能转化成更容易理解的代码,也就是和SQL风格非常接近的代码. 在介绍Linq之前,先介绍下泛型集合IEnumerable<T>,

LINQ综合学习大全

LINQ体验 LINQ体验(1)——Visual Studio 2008新特性 一.写本系列的目的 我平时利用课余零碎时间来学习ASP.NET3.5.LINQ.Silverlight.ASP.NET 3.5 Extensions等新东西,通过笔记形式来记录自己所学的历程,也给大家一起学习Visual Studio 2008 和 .NET 3.5提供一个平台,为保证此系列的完整性,我打算先依次介绍一下C# 3.0新语言特性和改进,然后从一条一条LINQ语句分析来贯穿LINQ的知识点.最后通过一个实

LINQ浅析

在C# 3.0之前,我们对不同的数据源(数据集合.SQL 数据库.XML 文档等等)进行操作(查询.筛选.投影等等),会使用不同的操作方式. C# 3.0中提出了LINQ(Language Integrated Query)这个非常重要的特性, LINQ定义了一组标准查询操作符用于在所有基于.NET平台的编程语言中更加直接地声明跨越.过滤和投射操作的统一方式. 关于LINQ中标准操作符的介绍和使用,园子里有很多很好的文章了,所以这里就不介绍LINQ的操作符使用了,主要通过一些概念和例子介绍LIN