LINQ技术是什么?亮点是什么?为啥可以这么任性?

介绍内容:html

语言集成查询 (LINQ) 是一组技术的名称,这些技术创建在将查询功能直接集成到 C# 语言(以及 Visual Basic 和可能的任何其余 .NET 语言)的基础上。 借助于 LINQ,查询如今已经是高级语言构造,就如同类、方法、事件等等。sql

(1)什么是linq技术?数据库

这个是在《ASP.NET高级程序设计第四版》第一章节中讲解asp.net版本中有关于该技术的起源背景,linq是asp.net 3.5 中跟AJAX一块儿在原来2.0版本上引入的一项新技术。c#

接下来是13章节中的一些知识点结合我本身的理解,其中我本身也存在两点疑惑,若是有精通的但愿能指导一番,哈哈,进入正题:缓存

linq:缩写是language integrated query 语言集成查询,是一项操做内存数据的技术,看完一个小节,感受跟sql查询的区别就是它能够将一些数据类对象执行查询过滤,返回本身请求的数据,也便是说 它既能够实现c#源代码环境中的对象数据查询,也能够实现关系数据库数据访问。asp.net

linq技术为咱们开发人员提供了五个比较实用的数据访问类型:学习

LinQ to Object:能够容许对内存中的类对象查询。测试

LinQ to DataSet:能够对内存中的DataSet缓存数据,执行数据访问。this

LinQ to xml :针对XML数据的一种解析封装能够实现传统xml解析效果。spa

LinQ to Entity:这是目前linq技术比较流行的一个亮点了,它提供了对关系数据库的数据访问,可使得开发者没必要经过编写负责ADO.NET的数据访问层 就能够实现数据库访问,也能够二者一块儿结合使。LinQ相对ADO.NET的优点在哪里呢?它真的有ADO.NET如此强大的数据访问功能呢?这是我今天 的第一个疑问,或许还须要后面的学习才能搞明白了。

LinQ to SQL:这个因为只限制sql server数据库,因此目前已经被LinQ to Entity逐渐取代。

(2)LinQ技术如何开发实现?

LinQ表达式:与咱们查询数据须要编写SQL语句同样,是使用它天然须要一个”语句“,就是linq表达式,并且同sql语句同样也有它本身的语 法规则。它也有与SQL语句中相似的一些关键字:select where orderby 已经groupby在语法上面也很类似。一下子在我本身的验证明例中,会对这个作一个例子说明。

LinQ表达式返回值必须是一个实现了IEnumerable的迭代对象。

对迭代对象进行枚举时,linq执行它的工做。

(3)关于linQ的延迟执行:linQ表达式中关于执行返回的过程,书中描述的延迟执行的特色,只是说了可能根据解析类型的不一样,linQ多是一次执行完也能够是在进行迭代的过程当中逐步执行。可是仍是对这个概念很模糊,这是个人第二个疑问,还须要深刻学习的时候回顾。

(4)LinQ表达式的几大核心特色:为了更易于理解如下的部分将会以本身以后的程序验证来举例讲解其中的特色

我先定义了数据类:

//定义数据类

public class mytestData { public int studentid { set; get; }//list绑定GridView列表属性不能为只读不然报错。 public string name { set; get; } public int age{set;get;} public mytestData(int id, string name, int age)

{ this.studentid = id; this.name = name; this.age = age;

}

}

在页面page_load中初始化测试数据,本来想了想既然是查询对象数据集合,那就定义一个ArrayList装载本身的定义的数据类,在编写LinQ表达式的时候发现了一个问题:

自定义的数据类容器须要有查询模式的实现,因此也就是说LinQ是支持一部分数据类型的查询。。。。

linq技术是什么

解决办法就是采用List类型:

List mydata = new List();

先来看一个linq表达式的简单例子:

protected void Page_Load(object sender, EventArgs e)

{ //定义测试验证数据

List mydata = new List();

mydata.Add(new mytestData(1, "george", 23));

mydata.Add(new mytestData(2, "lio", 25));

mydata.Add(new mytestData(3, "kaiwen", 20));

mydata.Add(new mytestData(4, "anna", 19));

mydata.Add(new mytestData(5, "angel", 16));

mydata.Add(new mytestData(6, "geo", 27));

mydata.Add(new mytestData(7, "demo", 30));

mydata.Add(new mytestData(8, "哈哈", 22)); //1.最简单的实现linq表达式

IEnumerable matchs;

matchs = from student in mydata //student是查询mydata集合中的对象的假名

where student.age>20 //查询过滤条件

select student; //查询返回知足过滤条件的matchs的集合 //页面绑定数据展现

GridView1.DataSource = matchs;

GridView1.DataBind();

}

页面效果:

linq技术是什么

刚才咱们对LinQ表达式应该有了初步的认识,如今在结合一些例子说明linQ表达式可以实现的几个效果:

投影:其实简单的说就是select语句支持一些数据类型和字符串数据操做,甚至能够动态定义一个新类返回信息,跟咱们以前的sql语句中select语句有一部分相似,linQ表达式能够将查询返回的数据,支持一些操做返回为咱们预期的类型,字符串或是动态新建的类。

可是对于通常值类型操做和自定义返回对象的投影在表达式上仍是存在一些差异,如今一个例子作一个演示:

//二、投影--值类型 //注意:这里的IEnumerable中已经将matchs申明为了string类型,说明返回的是string的迭代对象

IEnumerable matchs;

matchs = from student in mydata //student是查询mydata集合中的对象的假名

where student.age > 20 //查询过滤条件

select student.name + "添加的字符"; //查询返回知足过滤条件的matchs的集合 //页面绑定数据展现

GridView1.DataSource = matchs;

GridView1.DataBind();

过滤和排序:比较有特点的一点就是where语句中能够同SQL语法中的逻辑表达式和多个条件表达式都适用,最特别的是因为是在C#源代码环境中因此咱们能够调用本身自定一的方法如 where myfunction(类对象属性值)

//3 过滤和排序

IEnumerable matchs;

matchs = from student in mydata //student是查询mydata集合中的对象的假名

where student.age > 20 //查询过滤条件

orderby student.age //排序

select student;

//页面绑定数据展现

GridView1.DataSource = matchs;

GridView1.DataBind();

分组和聚合:若是对返回数据进行分组则返回的是分组对象的IEnumerable集合,每一个组实现IGrouping接口,首先咱们须要肯定分组条件,其次须要肯定每一个组须要返回什么信息。

//3 分组和聚合

var matchs = from student in mydata //student是查询mydata集合中的对象的假名

where student.age > 20 //查询过滤条件

orderby student.age //排序

group student by student.age into g //g是一个迭代IGouping对象,每一个组又是IEnumerable对象

select new { age = g.Key, avergeage = g.Average(student => student.age) };

//页面绑定数据展现

GridView1.DataSource = matchs;

GridView1.DataBind();

 

参考文献:www.xp510.com系统之家文章教程板块

相关文章
相关标签/搜索