系列课程视频地址: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的集成化查询语言相关推荐

  1. All Eyes on Docs! 练就火眼金睛,就来StarRocks 极客营

    开放源代码运动的主要领导者--埃里克·雷蒙(Eric Steven Raymond)在他出版的<大教堂与集市>中描述了这样一个精彩的观点:只要有足够多的眼球关注,就可让所有软件缺陷浮现.他 ...

  2. “StarRocks 极客营” 重磅来袭,和技术大牛一起推开数据库梦想之门!

    操作系统.编译器.数据库是软件工程师的梦之所向,对于大多数人而言,却是近在眼前.远在天边: 你是否曾渴望加入 Linux 这样伟大的社区,然觉门槛太高无从下手? 你是否也曾想象参与开发 MySQL 这 ...

  3. StarRocks极客营 | 90天,17名新晋贡献者,SQL Planner 实战回顾

    若能体验一个字符串的 SQL 怎么一步步在 StarRocks 被执行起来,对于 OLAP 开发者来说,能大大帮助理解整个框架和系统流程. 近日,由 StarRocks 社区举办的 SQL Plann ...

  4. Linux极客命令(压缩篇)

    1.*.tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName 注意:tar是打包,不是压缩! 2.*.tar.gz 和 *.tgz 解 ...

  5. 持续集成学习笔记-入门篇(1)持续集成基本概念

    今年7月份中下旬,笔者见过一个号称"资深开发者"的哥们(据说编程有十来年了),笔者问他:"你们平时用的持续集成工具都有哪些?"这哥们回答:"那些都是骗 ...

  6. python机器人编程与操作_机器人Python极客编程入门与实战 PDF 完整目录版

    给大家带来的一篇关于Python编程相关的电子书资源,介绍了关于机器人.Python.极客编程.入门.实战方面的内容,本书是由电子工业出版社出版,格式为PDF,资源大小25.8MB,Python极客团 ...

  7. 算法入门篇六 二叉树

    牛客网 算法入门篇 左程云老师 个人复习,如果侵全,设为私密 二叉树遍历(递归) 先序遍历(中,左,右) 中序遍历(左,中,右) 后序遍历(左,右,中) 如上图所示结构,二叉树的遍历本质上都是递归序, ...

  8. 【极客时间】《Java并发编程实战》学习笔记

    目录: 开篇词 | 你为什么需要学习并发编程? 内容来源:开篇词 | 你为什么需要学习并发编程?-极客时间 例如,Java 里 synchronized.wait()/notify() 相关的知识很琐 ...

  9. 【LINQ语句】LINQ语句

    前言 LINQ(Language Integrated Query)语言集成查询是一组用于c#和Visual Basic语言的扩展.它允许编写C#或者Visual Basic代码以查询数据库相同的方式 ...

  10. 保险极客CTO叶晖谈企业团体险的星辰大海

    图片来源:pexels.com 叶晖 保险极客CTO 本科毕业于清华大学,硕士就读于美国明尼苏达大学.曾供职于 Oracle 近 10 年,加入保险极客前,担任市场领先的 CRM 软件销售易的研发副总 ...

最新文章

  1. CentOS安装配置Samba
  2. java学习(98):线程join使用中断进行另一个
  3. SpringMVC整合Redis2.9.0
  4. 深入理解redis中的lua脚本
  5. 《小团团团队》第四次作业:项目需求调研与分析
  6. guice依赖注入原理_Google Guice依赖注入示例教程
  7. js中的var和new
  8. 一键查询网站服务器归属地,一文搞定3种批量查询手机归属地的方法
  9. AMD新旗舰:短小精悍,干掉双芯卡
  10. kali2022.1google输入法
  11. 大数据要学javaweb吗_自学java大数据可以找到工作吗?该怎么学?
  12. AutoVue中文字体被其他字体替换
  13. HTML一个简单大一的网页作业
  14. github android涂鸦,Android 涂鸦最佳实践
  15. 下面不是计算机网络面临的主要威胁是,网络安全复习题2
  16. 利用三级结构进行蛋白质嵌入的自我监督预训练
  17. 初学:什么是pacman以及pacman的使用方法
  18. 基因表达分析(上)- 差异表达分析
  19. HLS第二十七课(UG871,tcl与工程模式,typedefine, Csim)
  20. PostgreSQL函数——时间函数

热门文章

  1. 天气邮编火车等api接口
  2. 如何生动有趣的入门线性代数
  3. 在iconfont上下载图标素材及在vue前端框架下使用
  4. 如何对学者按照其在领域内的权威性进行排序
  5. 【Java 数据结构 算法】宁可累死自己, 也要卷死别人 16 字符串暴力匹配
  6. 极限脱出 量子计算机,极限脱出3零时困境各剧情关卡密码 全剧情密码答案大全...
  7. 观察者模式Spring之publishEvent事件处理
  8. 阿里云 DataWorks v2.0 常见问题与难点解析整理
  9. jQuery弹窗插件 AsyncBox
  10. google让输入钥匙环密码时的不当操作