Linq学习笔记(一) -- 初识Linq
来源:互联网 发布:win32界面编程 编辑:程序博客网 时间:2024/06/11 23:52
目录
- 目录
- 什么是Linq
- 查询表达式
- 检索数据集合
- 匿名类型
- 延迟执行
- 总结
什么是Linq
语言集成查询(LINQ)是一组技术的名称,而对于编写查询的开发人员来讲,LINQ最明显的语言集成部分就是查询表达式。它是使用C# 3.0中引入的声明性查询语法编写的,有了它,使得你可以使用非常简单的代码对各种数据源进行复杂的筛选、排序、分组等操作。
您可以使用同一个基本查询表达式来查询和转换SQL数据库、ADO.NET数据集、XML文档和流以及.NET集合中的数据。 ————LINQ查询表达式(C#编程指南)
由此可知,Linq使得在对象领域和数据领域为我们搭建了一座桥梁,是检索数据的集大成者。以往我们对数据库、XML、集合需要分别学习对应的知识;例如SQL脚本、对xml文件的操作以及对各种数据结构的集合的方法调用等;而有了Linq,使得我们可以通过Linq查询表达式就可以很方便的游走于各类数据源之间,而且Linq的优点还不止于此。
查询表达式
我们来看看Linq的查询表达式结构图:
查询表达式的概述:
- 查询表达式可用于查询和转换来自任意支持 LINQ 的数据源中的数据
- 查询表达式中的变量都是强类型的,但许多情况下您不需要显式提供类型,因为编译器可以推断类型
- 一些聚合方法如Count、Max等,没有等效的查询表达式子句,因此必须表示为方法调用
- 查询表达式可以编译为表达式树或委托,具体取决于查询所应用到的类型。 IEnumerable 查询编译为委托。 IQueryable 和 IQueryable 查询编译为表达式树
- 拥有延迟执行的特点
检索数据集合
我们先来写两个小例子,看看Linq的查询表达式是如何帮助我们检索数据的
int[] numbers = new int[] { 1, 21, 53, 4, 6435, 32, 6 };var result = from n in numbers where n > 50 select n;foreach (var item in result){ Console.WriteLine(item);}//输出结果:53,6435//这里numbers换成任意支持Linq的数据集合都可以,比如List<int>
我们再看一个Dictionary的小例子
Dictionary<int, string> dics = new Dictionary<int, string>();dics.Add(1, "2");dics.Add(3, "4");dics.Add(5, "6");dics.Add(7, "8");var resultDic = from n in dics where n.Key >= 5 select n;foreach (var item in resultDic){ Console.WriteLine(item.Value);}//输出结果:6,8
匿名类型
匿名类型的其他优点我们另做讨论,咱们先只在Linq中做个小例子,可以将数据源转换为我们需要的类型结构
代码示例如下:
//假设数据源为产品类public class Product{ public double Price { get; set; } public string Name { get; set; }}//我们再新建一个数据集合List<Product> products = new List<Product>(){ new Product(){ Price = 2000.0, Name = "CPU"}, new Product(){ Price = 300.0, Name = "GPU"},};var result = from p in products select new { Info = string.Format("产品名称为:{0},它的价格是:{1}", p.Name, p.Price) };//输出结果为://产品名称为:CPU,它的价格是:2000//产品名称为:GPU,它的价格是:300
延迟执行
Linq的查询操作分为三个部分
1.获取数据源
2.创建查询
3.执行查询
这也是Linq延迟执行的关键所在,就是将查询语句的创建与执行分开管理
以我们第一个简单的例子来说
//第一步获取数据源(XML、SQL皆可)int[] numbers = new int[] { 1, 21, 53, 4, 6435, 32, 6 };//第二步创建查询//这里并没有执行对数据的真实筛选,可以理解为只是编译了查询命令//比如这里的result变量可以看成是SQL语句://select * from numbers where n > 50,但是并未执行,类似视图var result = from n in numbers where n > 50 select n; //第三步执行查询,当对数据源执行遍历或者需要读取数据的时候,才会执行foreach (var item in result){ Console.WriteLine(item);}
对元素执行聚类函数或转换函数等会使得对Linq表达式强制立即执行,比如Max、Average、First、ToList等
总结
综上所述,Linq帮助我们统一了访问方式,类似ORM框架对应各数据库的方式,让我们对数据的操作非常方便
感谢各位看官,小弟不才,如有不妥之处,还望指出,对我更是帮助
- Linq学习笔记(一) -- 初识Linq
- LinQ学习笔记(一)
- linq学习笔记(一)
- linq学习笔记(一)
- Linq 学习(一)
- LINQ(1):初识 LINQ
- C#学习笔记之初识LINQ查询
- LINQ学习(一)基本概念
- Linq学习资料(一)
- LINQ准备篇--学习linq的资料和笔记(一)
- Linq 学习笔记(二)
- [转]LINQ(1):初识 LINQ
- 学习笔记(一)-Linq To Sql&PhotoShop第二章
- 学习 linq to ADO.NET 实例笔记(一)
- LINQ to SQL学习笔记(一)——Where
- C#学习笔记(一):泛型、lambda表达式和linq
- LINQ 之查询基础学习笔记(一)
- LINQ学习笔记(一)—感受篇
- jmeter get post 压力测试及ab 的压力测试及单个接口xhprof对比
- PHP SOAP实现WebService
- 深度学习之图像分类模型Cifar10数据集解读
- ERROR: JAVA_HOME is set to an invalid directory. JAVA_HOME = "D:\tools\jdk\jdk1.8.0_73" Please set t
- Mina TCP传输下主要接口介绍
- Linq学习笔记(一) -- 初识Linq
- jquery-radio
- 正则表达式
- 关联分析
- junit 加Jmockit单元测试
- ORA-01791: 不是 SELECTed 表达式
- Linux yum 安装 Error: Protected multilib versions
- jquery插件实现文件上传
- 小知识点总结