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查询表达式是在最近
一次创建对象时才会被编译的。
LINQ学习笔记(一)的更多相关文章
- linq学习笔记
最近在学习linq的一些基础知识,看了c#高级编程及阅读了园子内部几篇优秀的博文,有所体会,感觉应该记录下来,作为以后复习使用.都是一些最基础的知识,大致分为三个部分:linq预备知识:linq查询: ...
- (转)Linq学习笔记
写在前面 最近在看Linq,在博客园看到这篇文章,写的通俗易懂,转来和大家一起做个分享.原文地址http://www.cnblogs.com/goscan/archive/2011/05/05/Lin ...
- C#之Linq学习笔记【转】
写在前面 其实在09年就已经学习过Linq了,并被她那优美的语法所吸引,只是现在所在的公司还在使用VS2005在.Net2.0的框架下面的开发,所以Linq也很久没有用过了,最近看部门的同事对这个有些 ...
- C# Linq 学习笔记
刚刚学习了 Siki老师 的C#教程Linq部分,以下是笔记 需要引用命名空间 using System.Linq; 然后我们需要准备数据 武林高手类 /// <summary> /// ...
- C# LINQ学习笔记一:走进LINQ的世界
本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5832322.html,记录一下学习过程以备后续查用. LINQ 简介: 语言集成查询(LINQ)是Vi ...
- LINQ 学习笔记(1)
学习资源参考 : http://www.cnblogs.com/lifepoem/archive/2011/12/16/2288017.html 常用方法是 Where, OrderBy, Selec ...
- C# LINQ学习笔记五:LINQ to XML
本笔记摘抄自:https://www.cnblogs.com/yaozhenfa/p/CSharp_Linq_For_Xml.html,记录一下学习过程以备后续查用. 一.生成xml 1.1创建简单的 ...
- C# LINQ学习笔记四:LINQ to OBJECT之操作文件目录
本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5816051.html,记录一下学习过程以备后续查用. 许多文件系统操作实质上是查询,因此非常适合使用LINQ方 ...
- C# LINQ学习笔记三:LINQ to OBJECT之操作字符串
本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5814204.html,记录一下学习过程以备后续查用. 一.统计单词在字符串中出现的次数 请注意,若要执行计数, ...
- C# LINQ学习笔记二:LINQ标准查询操作概述
本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5801249.html,记录一下学习过程以备后续查用. “标准查询运算符”是组成语言集成查询 (LINQ) 模式 ...
随机推荐
- erlang app 文件
http://hje.iteye.com/blog/1211734 应用的概念¶ 当我们写了实现特定功能的代码之后,我们可能想将代码转成一个 应用 (application),这是可以作为一个单元启动 ...
- 基于Linux应用层的6LOWPAN物联网网关及实现方法
本发明涉及一种基于Linux应用层的6LOWPAN物联网网关及实现方法,所述物联网网关包括开发平台以及无线射频模块,其实现方法是:所述6LOWPAN物联网网关的以太网网口收到访问6LOWPAN无线传感 ...
- 【9210】找礼物(char* num[2000]的使用 get char num[i] = new char[1000])
Time Limit: 10 second Memory Limit: 2 MB 问题描述 新年到了,突然间,就在那美丽的一霎那,你好友和你(K个人)的周围满是礼物,你发扬你帅气的风格,让你的好友先拿 ...
- 图解linux启动过程
概述 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWUVZVUFOR0VO/font/5a6L5L2T/fontsize/400/fill/I0JBQkF ...
- Arcgis api for javascript学习笔记-控制地图缩放比例尺范围(3.2X版本与4.6版本)
Ⅰ. 在3.X版本中,设置Map对象的 "maxScale" 和 "minScale" 属性 <!DOCTYPE html> <html> ...
- 【23.15%】【codeforces 703C】Chris and Road
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- Win7 64有点找不到MSVCP71.DLL和MSVCR71.dll
现象: win7启动好多程序都报找不到MSVCP71.DLL,网页上不去,可是非常奇怪的是好像在线给系统打补丁没有受到不论什么影响,能正常打补丁. 解决: 从本机搜索了一下msvcp71.dll ...
- 给 Web 开发人员推荐的通用独立 UI 组件(一)(按钮很不错)
现代 Web 开发在将体验和功能做到极致的同时,对于美观的追求也越来越高.在推荐完图形库之后,再来推荐一些精品的独立 UI 组件.这些组件可组合在一起,形成美观而交互强大的 Web UI . 给 We ...
- 取消scrollView上下拉升
if (ios_Vewsion_5_Or_Above) { _scrollView.bounces = NO; } else { for (id subview in _scrollView.subv ...
- ASP.NET Core 设置和初始化数据库 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 设置和初始化数据库 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 设置和初始化数据库 上一章节中我们已经设置和配置好了 EF ...