自己学习LINQ记录(二)
2013-11-28 17:19
176 查看
LINQ查询表达式
查询表达式总是以from子句开始,以select或者group子句结束。From子句定义了查询的范围变量(range variable),可以认为该变量是对输入sequence的一个遍历,就像foreach做的那样。
IEnumerable<string> inquiryNames = from n in custNames where n.First() == 'C' select n;
以from开始
范围变量
from后面的n就是范围变量,一个范围变量指向当前操作符所对应的输入sequence中的当前元素可以嵌套select条件或者引入新的变量进行联合查询
运行三种方式引入新的范围变量
let
into
额外的from子句
以下的关键字可以特殊的作用
下面是存在对应查询表达式关键字的运算符:Where、Select、SelectMany、OrderBy、ThenBy、OrderByDescending、ThenByDescending、GroupBy、Join、GroupJoin。
延迟查询
LINQ是延迟执行的看下这段程序的结果
var numbers = new List<int>(); numbers.Add(1); IEnumerable<int> query = numbers.Select(n => n * 10); numbers.Add(2); foreach (int n in query) { Console.Write(n + "|"); }
执行结果
10|20|
这说明在query赋值的时候没有执行LINQ,而是在使用的时候,也就是foreach里面执行的数据。
LINQ是延迟查询的,但也有2种例外的情况。
返回单个元素或者标量值的查询运算符,如First、Count等。
下面这些转换运算符:ToArray、ToList、ToDictionary、ToLookup。
这2种都是立即执行
重复执行
可以反复执行一个查询,但有的时候需要保存数据或者执行时间过长的话应该避免。可以将结果存入Array,list等。
通过ToList直接存入变量中。
var numbers = new List<int>() { 1, 2 }; List<int> timesTen = numbers.Select(n => n * 10).ToList(); // Executes immediately into a List<int> numbers.Clear(); Console.Write(timesTen.Count); // Still 2
相关文章推荐
- 自己学习LINQ记录(一)
- 记录自己的计算机学习旅程(1)
- 从今天开始,记录自己学习laravel的过程
- Spring-Security (学习记录二)--修改为自己的登录页面
- 记录自己学习的点点滴滴
- wpf学习笔记(1)《都是自己根据网络资源学习记录的仅供参考》
- <struts学习>2014.2.8学习笔记(仅以此日志来记录自己的技术路)
- 终于抽出时间了,可以写自己的博客了,希望能够记录自己的学习和生活过程,与朋友共勉
- 从今天开始,记录自己的学习历程!
- 记录自己的Android学习(三)Activity生命周期
- 网上看了篇文章关于多表连接的,感觉很好,记录下来,以便日后自己学习
- 开始用CSDN记录自己的学习之路,自己的成长之路!!!
- 开通博客第一天,用来对学习工作中的问题加以记录,对自己的记录
- 开始记录自己的学习历程
- 在这里记录自己学习中遇到的零碎的容易忽略的知识点,不定时总结更新
- 2017年1月22日,我打算开始记录自己接下来的学习、生活、工作历程。
- 记录一下自己学习C语言的点滴
- 学习 《一步步搭建自己的博客》 第一版 边理解边记录
- 端口占用问题,今天学习的时候又出现了这个问题,找了度娘,特此记录以下。第一次写博客,希望自己能坚持下来。大家共同进步
- wpf学习笔记(4)《都是自己根据网络资源学习记录的仅供参考》