LINQ学习笔记(一)

LINQ,语言集成查询(Language Integrated Query)是一组用于C#和Visual Basic语言的扩展。

它允许编写C#或Visual Basic代码以查询数据库相同的方法操作内存数据。

它在.Net Framework的System.Linq。命名空间。

它是在.NET Framework 3.5 出现的技术,所以在创建新项目的时候必须要选3.5或者更高的版本。

否则无法使用,在更高的版本创建项目时会自动包含System.Linq的命名空间。

LINQ语法和SQL语法非常相似,除了先后顺序。

LINQ以from开头的原因是为了IDE的智能感知。在2005年的VB9 CTP版本中,那时候的LINQ查询语法就

select关键字在前面的,但是select关键字在前面,在智能感知(Intelisence)时候就很头大。经过微软IDE

组的权衡,确定把from关键字放在最前面。

更详细的解释,

假设你要书写这样的代码:Select p.Name,p.Age From p In persons where xxx 代码是一个个字符输入的。

我们在写到p in persons 之前,p的类型是无法推测的,所以写Select p. 的时候,Name之类的属性不会弹出智能提示来。

这样就需要先去写From这句,再回来写Select。

LINQ是Visual Studio 2008中的领军人物,借助于LINQ技术,我们可以使用一直类似SQL的语法来查询任何形式的数据。

一般来说,这类查询语法的一个重要特点就是可以并行化执行。虽然有些情况下并行可能会带来一些问题,但这种情况非常少见。

这样也就水到渠成地引出了PLINQ这个并行处理的LINQ类库。

PLINQ原名是Parallel LINQ,支持XML和内存中数据集合,执行与远程服务器上的查询语句(例如LINQ to SQL)显然无法实现这个功能。

将LINQ语句转换为PLINQ语句极为简单,只需要在查询语句中From子句所指定的数据源的最后添加AsParallel()即可。随后Where、OrderBy

和Select子句将自动调用这个并行的LINQ版本。

PLINQ可以以三种方式执行。第一种是是管道处理:一个线程用来读取数据源,而其他线程则用来处理查询语句,二者同步进行,虽然这个单一的

消费线程可能并不那么容易与多个生成线程同步。不过若是能够仔细配置好负载平衡的话,任然会极大地减少内存占用。

第二种模式叫做"stop and go",用于处理结果集需要被一次返回时(例如调用ToList、ToArray或对结果排序)的情况。在这种模式下,将依次完成

各个处理过程,并将结果统一返回给消费线程。这个模式在性能上将优于第一种模式,因为它省去了用来保持线程同步所花费的开销。

第三种模式叫做"inverted enumeration"。这种方法并不需要实现收集到所有的输出,然后再单一的线程中处理,而是将最终调用的函数通过ForAll

扩展传递到每个线程中。这是目前为止最快的一种处理模式,不过这需要传递到ForAll中的函数是线程安全的,且最好不包含任何lock之类的互斥语句。

LINQ语法

1.

from 临时变量 in 实现IEnumerable<T>接口的对象

where条件表达式

[orderby 条件]

[group by 条件]

select 临时变量中被查询的值

2.

实现IEnumerable<T>接口的对象.LINQ方法名(Lambda表达式)。

如:

string input = "hello world";

int count=input.Count(w=>w==‘o‘);//查询字母o出现的次数

注意:能够使用LINQ的对象需要实现IEnumerable<T>接口。并且LINQ查询表达式是在最近

一次创建对象时才会被编译的。

时间: 2024-10-13 03:06:41

LINQ学习笔记(一)的相关文章

Linq 学习笔记

简介: LINQ 提供一种统一的方式,让我们能在C#语言中直接查询和操作各种数据.?? LINQ是用来描述数据访问总体方式的术语.LINQ to Object是针对实现了IEnumerable<T>的对象的LINQ:LINQ to SQL是针对关系数据库的LINQ:LINQ to XML是针对XML文档的LINQ.? ? LINQ除了提供一个统一的API来操作各种数据,并且为我们提供了编译时类型检查和动态创建查询表达式的能力.? LIINQ相关的C#语言功能 1.隐式类型局部变量 局部变量用v

C#之Linq学习笔记【转】

写在前面 其实在09年就已经学习过Linq了,并被她那优美的语法所吸引,只是现在所在的公司还在使用VS2005在.Net2.0的框架下面的开发,所以Linq也很久没有用过了,最近看部门的同事对这个有些兴趣,所以打算整理点东西出来跟大家一起做个分享. 什么是Linq LINQ是Language Integrated Query的简称,它是集成在.NET编程语言中的一种特性.已成为编程语言的一个组成部分,在编写程序时可以得到很好的编译时语法检查,丰富的元数据,智能感知.静态类型等强类型语言的好处.并

LINQ学习笔记

基础概念 LINQ是微软推出的一项具有突破性的新特性--语言集成查询(Language Integrate Query),他在对象和数据间建立了一种对应关系,可以使用访问内存对象的方式查询数据集合 在.NET类库中,LINQ相关类库都在System.Linq命名空间下,对于目前程序需要用到的是LINQ to Object,数据源为实现了接口IEumerable<T>或IQueryable<T>的内存数据集合,对于本程序也就是List<T>集合 LINQ查询的目的是从制定

linq 学习笔记(一)

First: 找到符合条件的第一记录,就返回了,不管后面还有多少数据. Single: 先将记录都梳理一次,再找到符合要求的唯一记录. Single():操作一个集合,同时强要求只有一个对象匹配,并返回这一个. First():操作一个集合,可以有多个对象匹配,但是只返回第一个. Take(1):操作一个集合,可以有对个对象匹配,单只返回第一个,但是这里返回的是一个集合,而不是单个的概念. Take()方法的作用就是:从查询结果中提取前n个结果.而实例中出现的Skip()方法正好是Take()方

Linq学习笔记1

1.Linq查询操作包含以下三个不同的.独立的动作:     获取数据源     创建查询     执行查询 2.Linq查询的执行分为两种:     ※延迟执行       创建查询时,查询变量本身不执行查询,不包含任何数据,也不会采取其他任何形式的动作.它只不过是一个查询占位符,是一个IEnumerable对象,当枚举此对象的元素时,查询才得以执行.     ※立即执行       任何返回单个值的Linq查询都会被立即执行,如Count.Max等,也可以通过调用ToList.ToArray

Linq学习笔记---Linq to Xml操作

LINQ to XML的成员, 属性列表: 属性 说明 Document 获取此 XObject 的 XDocument  EmptySequence  获取空的元素集合  FirstAttribute  获取此元素的第一个属性  FirstNode  获取此节点的第一个子节点  HasAttributes  获取一个值,该值指示此元素是否至少具有一个属性  HasElements  获取一个值,该值指示此元素是否至少具有一个子元素  IsEmpty  获取一个值,该值指示此元素是否不包含内容

LINQ学习笔记——(3)基本查询操作符

Select() 作用于uIEnumerable<TSource>类型 public static void Test() { List<string> persons = new List<string>(); persons.Add("张 一"); persons.Add("杨 二"); persons.Add("张 三"); persons.Add("贾 四"); persons.Ad

LINQ学习笔记——(2)Lambda表达式

最基本的 Lambda 表达式语法: (参数列表)=>{方法体} 说明: 参数列表中的参数类型可以是明确类型或者是推断类型 如果是推断类型,则参数的数据类型将由编译器根据上下文自动推断出来 class Program { public delegate string trans(string s); static void Main(string[] args) { string s = "abcdEFGH"; trans tran = (string str) => {

LINQ学习笔记——(1)添加扩展方法

目的:  对已存在类型的行为进行扩展 注意事项: 扩展方法是一种特殊的静态方法 扩展方法必须在静态类中定义 扩展方法的优先级低于同名的类方法 扩展方法只在特定的命名空间内有效 除非必须不要滥用扩展方法 public static class ExtraMethod { public static string ToPascal(this string s) { //把字符串的首字母大写,其它为小写 return s.Substring(0, 1).ToUpper() + s.Substring(