前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LINQ基础概述

LINQ基础概述

作者头像
lpxxn
发布2018-01-31 12:50:47
1.7K0
发布2018-01-31 12:50:47
举报
文章被收录于专栏:技术之路技术之路

介绍LINQ基础之前,首说一下LINQ 的历史和LINQ是什么,然后说一下学习 LINQ要了解的东西和 LINQ基础语法

LINQ 的历史

从语言方面的进化 –委托 –匿名方法 –Lambda表达式 –Linq查询表达式

上边这四个我会在下边一一解说

从时间方面的演进 –2004年 –2005年9月,C#2.0的PDC上发布 –2005年11月,C#2.0预览版 –2006年1月,VB8.0预览版 –2007年11月,.net 3.5发布

LINQ是什么

LINQ是语言级集成查询(Language INtegrated Query) LINQ是一种用来进行数据访问的编程模型,使得.NET语言可以直接支持数据查询 LINQ的目标是降低访问数据的复杂度 LINQ可以用统一的方法访问不同类型的数据,可以将数据作为对象使用 能够更好地与编程模型集成 可以在Visual Studio中进行智能提示 动态编程

LinQ目的

面向对象技术诞生以来并没有解决降低访问和整合信息数据的复杂度的问题。其中两个最主要访问的数据源与数据库和 XML 相关。

使用LINQ的目的是为了提供一个解决对象关系映射问题的方案,同时简化对象和数据源的交互。LINQ最终发展成为一个通用语言集成查询的工具包。

LINQ正如它的名字“集成查询语言”的含义一样,它提供给程序员一个统一的编程界面。程序员不需要关心他将要操作的将是关系数据库还是XML,甚至是远程的对象,它都采用同样的查询方式。就如同通过T-SQL操纵数据库一样,不管是Oracle,SyBase还是SQL Server,他们的Select语法都是一样的。

有了LINQ,程序员便可以不再沉泥于不同的数据访问技术的学习。不管编程语言如何发展,还是数据库技术的发展,都不再需要程序员进行学习,数据存储的效率由数据库厂商进行优化,灵活的数据操作方法由数据访问中间件厂商提供,程序员只需要编写业务逻辑。

LINQ包括: –LINQ to Objects 用于对象的查询 –LINQ to XML 对XML数据的查询 –LINQ to ADO.NET 对数据库的查询      LINQ to DataSets 数据集      LINQ to Entities ORM对象      LINQ to SQL 简易ORM框架 命名空间在System.Linq 实现 IEnumerable<T> 或 IQueryable<T> 接口的对象都可使用LINQ操作

LINQ框架图

委托

委托是一种定义方法签名的类型。 当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联。 您可以通过委托实例调用方法。

委托用于将方法作为参数传递给其他方法。 事件处理程序就是通过委托调用的方法

public delegate void MyF1( int a);

public void M1( int a)

  {

Console .WriteLine(a);

  }

MyF1 _myf1 = M1 ;

  myf1(3);

与委托的签名(由返回类型和参数组成)匹配的任何可访问类或结构中的任何方法都可以分配给该委托。 方法可以是静态方法,也可以是实例方法。 这样就可以通过编程方式来更改方法调用,还可以向现有类中插入新代码。 只要知道委托的签名,就可以分配您自己的方法。

匿名方法

我们在使用一个方法的时候, 一般情况下我们会先把方法名、参数、返回值

写出来也称做命名方法

int MyMethod(int a){}

匿名方法的意思就是不用给定方法的名称。允许我们定义委托对象可以接收的代码

上边的委托我们可以写成

MyF1 _f = delegate ( int a)

                {

Console .WriteLine(a);

                };

            _f(1);

例button的点击事件

通常的写法是

button1.Click += button1_Click;

void button1_Click(object sender, EventArgs e)

        {

MessageBox.Show("Click!" )

        }

用匿名方法可以这样

button1.Click += delegate( object obj1, EventArgs e)

                {

MessageBox .Show("Click!" );

                };

Lambda 表达式

lambda 取代的匿名方法

Lambda 表达式是一个可用于创建委托或表达式树类型的匿名函数。 通过使用 lambda 表达式,可以写入可作为参数或返回为函数调用值的本地函数。 Lambda 表达式对于编写 LINQ 查询表达式特别有用。 若要创建 Lambda 表达式,必须在 Lambda 运算符 => 左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。 例如,lambda 表达式 x => x * x 指定名为 x 的参数并返回 x 的平方。 

我们还是用上边的delegate例子:

MyF1 _my1 = a =>

                {

Console .WriteLine(a);

                };

_my1(3);

Button的点击事件可以写成这样

button1.Click += (obj1, obje2) =>

                {

MessageBox.Show("Click!" );

                };

Linq的基本语法

所有 LINQ 查询操作都由以下三个不同的操作组成: 获取数据源。 创建查询。 执行查询。

查询表达式必须以 from 子句开头,并且必须以 select 或 group 子句结尾。 在第一个 from 子句和最后一个 select 或 group 子句之间,查询表达式可以包含一个或多个下列可选子句:where、orderby、join、let 甚至附加的 from 子句。 还可以使用 into 关键字使 join 或 group 子句的结果能够充当同一查询表达式中附加查询子句的源。

int[] _scores = new int [] { 97, 92, 81, 60 };           

IEnumerable <int > _query =

from score in _scores

where score > 80

select score;           

foreach (int i in _query)

            {

Console .WriteLine(i + " " );

            } 

也可以这么写

IEnumerable< int > _query = _scores.Where(x =>  x > 80);

foreach (int i in _query)

            {

Console .WriteLine(i + " " );

            }

下图显示了完整的查询操作。 在 LINQ 中,查询的执行与查询本身截然不同;换句话说,如果只是创建查询变量,则不会检索任何数据。

完整的 LINQ 查询操作
完整的 LINQ 查询操作

查询变量本身只是存储查询命令。 实际的查询执行会延迟到在 foreach 语句中循环访问查询变量时发生。 此概念称为“延迟执行”

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-01-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档