什么是linq技术?

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

(1)什么是linq技术?

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

接下来是13章节中的一些知识点结合我自己的理解,其中我自己也存在两点疑惑,如果有精通的希望能指导一番,哈哈,进入正题:

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

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

LinQ to Object:可以允许对内存中的类对象查询。

LinQ to DataSet:可以对内存中的DataSet缓存数据,执行数据访问。

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

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<T>的迭代对象。

对迭代对象进行枚举时,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是支持一部分数据类型的查询。。。。

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

List<mytestData> mydata = new List<mytestData>();

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

protected void Page_Load(object sender, EventArgs e) { //定义测试验证数据 List<mytestData> mydata = new List<mytestData>(); 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<mytestData> matchs; matchs = from student in mydata //student是查询mydata集合中的对象的假名 where student.age>20 //查询过滤条件 select student; //查询返回满足过滤条件的matchs的集合 //页面绑定数据展示 GridView1.DataSource = matchs; GridView1.DataBind(); }

调试查看返回的匹配的数据类型:

页面效果:

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

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

但是对于一般值类型操作和自定义返回对象的投影在表达式上还是存在一些差别,现在一个例子做一个演示:

//2、投影--值类型 //注意:这里的IEnumerable<string>中已经将matchs申明为了string类型,说明返回的是string的迭代对象 IEnumerable<string> matchs; matchs = from student in mydata //student是查询mydata集合中的对象的假名 where student.age > 20 //查询过滤条件 select student.name + "添加的字符"; //查询返回满足过滤条件的matchs的集合 //页面绑定数据展示 GridView1.DataSource = matchs; GridView1.DataBind();

//2、投影--对象类型 //注意:这里的IEnumerable<string>中已经将matchs申明为了string类型,说明返回的是string的迭代对象 //IEnumerable<string> matchs; var matchs = from student in mydata //student是查询mydata集合中的对象的假名 where student.age > 20 //查询过滤条件 //这里的new{}是隐式创建的类对象,没有既定的类型,所以无法通过IEnumerable<类别名> matchs //来匹配返回的迭代类对象,但是可以通过Var或者在先定义预期返回对象的类型 select new { id=student.studentid,name=student.name,age=student.age}; //页面绑定数据展示 GridView1.DataSource = matchs; GridView1.DataBind();

过滤和排序:比较有特色的一点就是where语句中可以同SQL语法中的逻辑表达式和多个条件表达式都适用,最特别的是由于是在C#源代码环境中所以我们可以调用自己自定一的方法如 where myfunction(类对象属性值)

//3 过滤和排序 IEnumerable<mytestData> matchs; matchs = from student in mydata //student是查询mydata集合中的对象的假名 where student.age > 20 //查询过滤条件 orderby student.age //排序 select student; //页面绑定数据展示 GridView1.DataSource = matchs; GridView1.DataBind();

分组和聚合:如果对返回数据进行分组则返回的是分组对象的IEnumerable<T>集合,每个组实现IGrouping<T,k>接口,首先我们需要确定分组条件,其次需要确定每个组需要返回什么信息。

//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<T,K>对象,每个组又是IEnumerable<mytestData>对象 select new { age = g.Key, avergeage = g.Average(student => student.age) }; //页面绑定数据展示 GridView1.DataSource = matchs; GridView1.DataBind();

(0)

相关推荐

  • asp.net从入门到精通之LINQ开发技术(十七)

    第17讲 LINQ开发技术 语言集成查询(LINQ)是.NET Framework 3.5中一项具有突破性的创新,它在对象和数据之间架起了一座桥梁.LINQ会成为开发代码的重要组成部分,在编写代码时, ...

  • 新一代WEB呈现技术:什么是Silverlight

    微软Silverlight是一个跨浏览器、跨客户平台的技术,能够设计、开发和发布有多媒体体验与富交互(RIA,Rich Interface Application的网络交互程序。 因为Silverli ...

  • 必须学习的10项.NET技术

    当然对于这个问题,每个人都有自己的想法.但是作为来说,以下只是作为我个人认为比较重要的10项需要学习的技术,推荐给大家: 操作方法 01 WCF (Windows Communication Foun ...

  • 教你了解无线网络技术中的故障分析与解决方法

    无线网络技术和我们的生活息息相关,同时我们也遇到很多的网络误区,这里就详细说明一下面对网络误区,我们应该如何去解决。网络作为我们的必不可少的生活组成部分,已经成为与衣、食、住、行同等重要的必要元素了。 ...

  • 802.11ac无线技术潜力以及局限性

    数月来,供应商一直在测试他们的11ac产品,测试结果显示了11ac的性能以及哪些变量会其影响。一些测试是在理想的实验室环境下进行;其他测试则设计实际或模拟的生产网络。测试结果包括:在最佳情况下,11a ...

  • DVI接口技术定义及分类介绍

    DVI的英文全名为Digital Visual Interface,中文称为“数位视讯接口”。是一种视讯接口标准,设计的目标是透过数位化的传送来强化个人电脑显示器的画面品质。目前广泛应用于LCD、数位 ...

  • 微软提前升级Win10技术预览版 Build 9860版本并未开放下载

    微软已经提前为Windows 10技术预览版发布了新的更新。不过更新仅针对目前没有开放给大众下载的Build 9860版本,更新KB3008956,KB3008968和KB3008931都需要在Win ...

  • CPU中TDP技术是什么及其功耗介绍

    在电脑上表示的是各个部件的功耗,尤其是电脑的CPU(中央处理器)GPU(图形处理器)是电脑耗电量的重要指标。是CPU公司对某系列处理器给出的散热器设计参考的最高功率值。TDP技术就是降低CPU功耗的节 ...

  • 基础知识:详解UPS电源的技术

    UPS是一种高质量、高可靠性的独立电源,是一种蓄电池静止型不间断供电装置。它由整流器、逆变器、交流静态开关和蓄电池组组成。平时,市电经整流器变为直流对蓄电池浮充电,同时经逆变器输出高质量的交流净化电源 ...