LINQ学习(一):LINQ初认识

一、简介
1、什么是Linq?
LINQ(Language Integrated Query) 语言继承查询。
LINQ是一组语言特性和API,可以使用统一的方式编写各种查询。用于保存和检索来自不同数据源的数据,从而消除了编程语音和数据库之间的不匹配,以及为不同类型的数据源提供单个查询接口。

LINQ总是使用对象,因此可以使用相同的查询语法来查询和转换XML、对象集合、SQL数据库、ADO.NET数据库以及任何其他可用的LINQ提供程序格式的数据

2、LINQ主要包含三个部分:
1、LINQ to Objects     主要负责对象的查询。
2、LINQ to XML          主要负责XML的查询。
3、LINQ to ADO.NET  主要负责数据库的查询。
         LINQ to SQL
         LINQ to DataSet
         LINQ to Entities

3、LINQ的优势:
1、熟悉的语言:开发人员不必为每种类型的数据源或者数据格式学习心的语言。
2、更少的编码:相比传统的方式,LINQ减少了要编写的代码量。
3、可读性强:LINQ增加了代码的可读性,因此其他开发人员可以很轻松的理解和维护。
4、标准化的查询方式:可以使用相同的LINQ语法查询多个数据库。
5、类型检查:程序会在编译的时候提供类型检查。
6、只能感知提示:LINQ为通用集合提供只能感知提示。
7、整形数据:LINQ可以检索不同形状的数据。

二、为什么要使用LINQ?
举个栗子:现在遇到一个问题,对一个整数类型的数组,找到里面的偶数,并进行降序排序。不使用LINQ我们该如何解决?
1、定义一个整数数组list,用来存放所有的偶数
2、foreach遍历数组,找出给定数组内偶数,将偶数放入list数组
3、sort为升序排序,为了达到降序的目的,所以排序好后需要反转。
LINQ学习(一):LINQ初认识_第1张图片

使用for循环比较麻烦,并且代码可读性、维护性差。
为了提高代码可读性,以及可维护性,我们使用委托来编写:
1、声明委托
2、定义一个Where方法,传入待处理的数组,委托
3、将foreach封装
4、调用方法时,再实现委托
LINQ学习(一):LINQ初认识_第2张图片 LINQ学习(一):LINQ初认识_第3张图片
在此解释下为什么要用委托?
  使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的。

回归正题,虽然使用了委托增加了代码可读性,但是我们需要代码更紧凑和可读!所以我们引入Lambda表达式查询
下面我们演示如何使用LINQ和Lambda表达式根据特定条件来查询数组
var在此为一个隐式类型,在声明一个变量(并且同时给它赋值)的时候,完全不用指定变量的类型,只要一个var就解决问题了
这样写不仅不会影响性能因为它与显示声明编译后产生的中间语言代码(IL代码)是完全一样的(编译器根据变量的值,推到出变量的类型,才产生的IL代码)
注意:使用var时不能只声明而不赋值,因为不赋值编译器无法推到这个变量是什么类型
LINQ学习(一):LINQ初认识_第4张图片
注意:此处调用的Where方法为IEnumerable下的方法,并非上面我们自己书写的方法

这样使用LINQ与Lambda表达式来编写代码,是不是变得简洁明了太多?代码变的更为紧凑,可读性更强。

























你可能感兴趣的:(C#,LINQ)