LINQ学习笔记(一)
阅读原文时间:2023年07月12日阅读:1

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接口的对象

where条件表达式

[orderby 条件]

[group by 条件]

select 临时变量中被查询的值

2.

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

如:

string input = "hello world";

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

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

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

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章