【极客营】LINQ入门篇—LINQ,类似SQL的集成化查询语言
系列课程视频地址:https://ke.qq.com/course/267924?flowToken=1006068
1、LINQ是什么
LINQ(Language Integrated Query)语言集成查询是一组用于c#和Visual Basic语言的扩展。它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据。
它在对象和数据之间建立一种对应关系,可以使用访问内存对象的方式查询数据集合,
LINQ使查询成为C# 中一种语言构造,开发人员可以在C#代码中嵌套类似于SQL语句的查询表达式,从而实现数据查询的功能。
LINQ的优势
(1)、无需复杂学习过程即可上手
(2)、编写更少代码即可创建完整应用。
(3)、更快开发错误更少的应用程序。
(4)、无需求助奇怪的编程技巧就可合并数据源。
(5)、能够大幅减少过程控制语句的代码块,使代码的可读性和可维护性大幅提高。
(6)、任何对象或数据源都可以定制实现Linq适配器,为数据交互带来真正方便。
根据数据源类型,可以将LINQ技术分为以下几个主要的技术方向。
(1)LINQ to Object:数据源为实现了接口Ienumeralbe<T>或IQueryble<T>的内存数据集合,这也是LINQ的基本查询部分。
(2)LINQ to ADO.NET:数据源为ADO.NET数据集合,这里将数据库中的表结构映射到类结构,并通过ADO.NET从数据库中获取到数据集到内存中,通过LINQ进行数据查询。
(3)LINQ to XML:数据源为XML文档,这里通过XElement、XAttribute等类将XML文档加载到内存中,通过LINQ进行数据查询。
LINQ作为一种数据查询编码方式,它本身并不是独立的开发语言,也不能进行应用程序开发,但是在.Net3.5及以上的版本中,可以在C#中集成LINQ查询代码。
在任何源代码文件中,要使用LINQ查询功能,必须引用System.LINQ命名空间,使用LINQto XML要引用System.Xml.LINQ,使用LINQ to ADO.NET要引用System.Data.Linq命名空间。
代码如下:
using System.Linq;
using System.Xml.Linq;
using System.Data.Linq;
2、LINQToObject--查询表达式
2.1 from子句应用
LINQ最具突破性的优势在于将文本查询与对象操作完美集成,它让查询数据和操作对象一样安全和轻松,查询是LINQ的核心概念之一。
LiNQ查询表达式访问的数据源是包含一组数据的集合对象(IEnumerable<T>或IQueryable<T>类型)返回的查询结果也是包含一组数据的集合对象。LINQ还可以通过函数的形式提供过滤条件,从而大大简化了查询表达式的复杂度.
由于LINQ中查询表达式访问的是一个对象,所以该对象本身可以表示各种类型的数据源,比如SQL server数据库、XML文档、ADO.NET数据集合以及内存中的数据集合等。
在.net类库中,LINQ相关类库都在System.Linq命名空间下,该空间下提供支持使用LINQ进行查询的类和接口,其中最主要的两个类和两个接口:
IEnumerable<T>接口:它表示可以查询的数据集合,一个查询通常是逐个对集合中的元素进行筛选操作,返回一个IEnumerable<T>对象,用来保存查询结果。
IQueryable<T>接口,它继承IEnumerable<T>接口,表示一个可以查询的表达式目录树。
Enumerable类:它通过对IEnumerable<T>提供从扩展方法,实现LINQ标准查询运算。包括过滤、导航、排序、查询、联接、求和、最大值、最小值等操作。
Queryable类:它通过对IQueryable<T>提供扩展方法,实现LINQ标准查询运算。包括过滤、导航、排序、查询、联接、求和、最大值、最小值等操作。
传统意义上的数据查询语言,通常是比较易懂,且有一定语义的文本,例如在SQL查询语法中,select student.stuname from student,此处的select用来指定要查询的结果,form用来指定数据源。
LINQ中的查询和传统的查询有很多相似之处,LINQ查询的目的从指定的数据源中查询满足特定条件的数据元素,并且根据需要对这些查询的元素进行排序、连接等操作。LINQ查询包括以下几个主要元素:
(1) 数据源:数据源表示LINQ查询将从哪里查找数据,它通常是一个或多个数据集,每个数据集包含一系列的元素,数据集是一个类型为Ienumeralbe<T>或Iqueryable<T>的对象,可以对它进行枚举、遍历每一个元素,此外它的元素可以是任何数据类型,所以可以表示任何数据的集合。
(2) 目标数据:目标数据用来指定查询的具体想要的是什么数据,数据源中的元素并不一定是查询所需要的结果,
(3) 筛选条件:筛选条件定义了对数据源中元素的过滤条件,只有满足条件的元素才作为查询结果返回
(4) 附加操作:附加操作表示一些其他的具体操作,比如,对查询结果进行排序、计算查询结果的最小值、最大值、求和、对查询结果进行分组等。
其中,数据源和目标数据是LINQ查询的必备元素,筛选条件和附加元素是可选元素。
查询表达式是由查询关键字和对应的操作数组成的表达式整体。查询表达式是查询语言最基本的编写格式,同样LINQ查询表达式是一种直观、简洁的查询代码编写方式,LINQ初体验的案例即是查询表达式。
C#3.0开始为查询表达式提供了一些关键字,如下图:
查询表达式关键字
关键字 |
功能 |
From |
指定要查找的数据源及范围变量,多个from子句则表示从多个数据源中查找数据 |
Select |
指定查询要返回的目标数据,可以指定任何类型、甚至是匿名类型 |
Where |
指定元素的筛选条件,多个where子句则表示并列条件,必须全部满足才能入选 |
Orderby |
指定元素的排序字段和排序方式,当有多个排序字段时,由字段顺序确定主次关系,可以指定升序和降序两种排序方式 |
Group |
指定元素的分组字段 |
Join |
指定多个数据源的关联方式 |
数据源是LINQ查询中必不可少的元素,数据源是实现泛型接口IEnumerable<T>或IQueryalbe<T>的类对象,可以将IEnumerable<T>理解成一个多个元素的列表(或数据库中的表)可以用foreahc遍历它的所有元素,从而完成查询操作。由于是泛型接口,所以通过为数据源指定不同的元素类型,可以表示任何数据集合,在.NET类库中,列表类、集合类、数组等都实现了接口IEnumerable<T>,所以可以将这些数据作为数据源在LINQ查询中使用。
每个LINQ查询都以from子句开始,from子句包括以下两个功能:
(1) 指定查询采用的数据源
(2) 定义一个本地变量,表示数据源中单个元素。
单个from子句的编写格式如下,其中dataSource表示数据源,localVar表示单个元素。
语法:from localVar indataSource
一般情况下,不用为from子句的localVar元素指定数据类型,编译器会根据数据源类型为它分配合适的类型,通常元素类型为IEnumerable<T>的类型T。
建议:如果没有特别需要,建议使用不指定类型的本地变量,让编译器自动根据数据源判断具体的元素类型。
例如:
int[] arr={10,20,50,30,40,60,78};
var q1=from val in arr select val; //arr为数据源
foreach(var item in q1)
{
System.Console.WriteLine(item);
}
2.2 select子句应用
在LINQ查询中,select子句和from子句都是必备子句,LINQ查询表达式必须以select或group子句结束。Select子句指定在执行查询时产生结果的数据集中元素的类型。
语法:
Select element;
其中select是关键字,element参数则指定查询结果中元素的类型及初始化方式。
例题1:
学生成绩类LessonScore:
学生Student类:
测试类代码:
注意:通常情况下,不需要为select子句中的元素指定具体数据类型,另外如果查询结果中的元素只是在本函数内临时使用,尽量使用匿名类型,这样可以减少很多不必要的类定义。
2.3 用where子句指定筛选条件
通常一个LINQ查询经常需要对数据源中的元素进行过滤。只有符合条件的元素,才能参与查询结果的计算。在LINQ中,用where子句指定查询的过滤条件
语法:
Where expression ;
expression是一个逻辑表达式,返回布尔值true/false,当被查询的元素参与表达式运算返回结果为true时,该元素参与查询结果运算。
例题:
注意:where子句中的条件尽量简短易懂,并且还可以通过函数等方式来提供判断条件,当出现多个逻辑的时候,可以考虑使用多个并列的where子句代替。
完整内容请移步至视频:https://ke.qq.com/course/267924?flowToken=1006068
【极客营】LINQ入门篇—LINQ,类似SQL的集成化查询语言相关推荐
- All Eyes on Docs! 练就火眼金睛,就来StarRocks 极客营
开放源代码运动的主要领导者--埃里克·雷蒙(Eric Steven Raymond)在他出版的<大教堂与集市>中描述了这样一个精彩的观点:只要有足够多的眼球关注,就可让所有软件缺陷浮现.他 ...
- “StarRocks 极客营” 重磅来袭,和技术大牛一起推开数据库梦想之门!
操作系统.编译器.数据库是软件工程师的梦之所向,对于大多数人而言,却是近在眼前.远在天边: 你是否曾渴望加入 Linux 这样伟大的社区,然觉门槛太高无从下手? 你是否也曾想象参与开发 MySQL 这 ...
- StarRocks极客营 | 90天,17名新晋贡献者,SQL Planner 实战回顾
若能体验一个字符串的 SQL 怎么一步步在 StarRocks 被执行起来,对于 OLAP 开发者来说,能大大帮助理解整个框架和系统流程. 近日,由 StarRocks 社区举办的 SQL Plann ...
- Linux极客命令(压缩篇)
1.*.tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName 注意:tar是打包,不是压缩! 2.*.tar.gz 和 *.tgz 解 ...
- 持续集成学习笔记-入门篇(1)持续集成基本概念
今年7月份中下旬,笔者见过一个号称"资深开发者"的哥们(据说编程有十来年了),笔者问他:"你们平时用的持续集成工具都有哪些?"这哥们回答:"那些都是骗 ...
- python机器人编程与操作_机器人Python极客编程入门与实战 PDF 完整目录版
给大家带来的一篇关于Python编程相关的电子书资源,介绍了关于机器人.Python.极客编程.入门.实战方面的内容,本书是由电子工业出版社出版,格式为PDF,资源大小25.8MB,Python极客团 ...
- 算法入门篇六 二叉树
牛客网 算法入门篇 左程云老师 个人复习,如果侵全,设为私密 二叉树遍历(递归) 先序遍历(中,左,右) 中序遍历(左,中,右) 后序遍历(左,右,中) 如上图所示结构,二叉树的遍历本质上都是递归序, ...
- 【极客时间】《Java并发编程实战》学习笔记
目录: 开篇词 | 你为什么需要学习并发编程? 内容来源:开篇词 | 你为什么需要学习并发编程?-极客时间 例如,Java 里 synchronized.wait()/notify() 相关的知识很琐 ...
- 【LINQ语句】LINQ语句
前言 LINQ(Language Integrated Query)语言集成查询是一组用于c#和Visual Basic语言的扩展.它允许编写C#或者Visual Basic代码以查询数据库相同的方式 ...
- 保险极客CTO叶晖谈企业团体险的星辰大海
图片来源:pexels.com 叶晖 保险极客CTO 本科毕业于清华大学,硕士就读于美国明尼苏达大学.曾供职于 Oracle 近 10 年,加入保险极客前,担任市场领先的 CRM 软件销售易的研发副总 ...
最新文章
- CentOS安装配置Samba
- java学习(98):线程join使用中断进行另一个
- SpringMVC整合Redis2.9.0
- 深入理解redis中的lua脚本
- 《小团团团队》第四次作业:项目需求调研与分析
- guice依赖注入原理_Google Guice依赖注入示例教程
- js中的var和new
- 一键查询网站服务器归属地,一文搞定3种批量查询手机归属地的方法
- AMD新旗舰:短小精悍,干掉双芯卡
- kali2022.1google输入法
- 大数据要学javaweb吗_自学java大数据可以找到工作吗?该怎么学?
- AutoVue中文字体被其他字体替换
- HTML一个简单大一的网页作业
- github android涂鸦,Android 涂鸦最佳实践
- 下面不是计算机网络面临的主要威胁是,网络安全复习题2
- 利用三级结构进行蛋白质嵌入的自我监督预训练
- 初学:什么是pacman以及pacman的使用方法
- 基因表达分析(上)- 差异表达分析
- HLS第二十七课(UG871,tcl与工程模式,typedefine, Csim)
- PostgreSQL函数——时间函数