什么是linq技术?

2016-03-31 15:59 12 1 收藏

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享什么是linq技术?吧。

【 tulaoshi.com - 服务器 】

什么是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表达式返回值必须是一个实现了IEnumerableT的迭代对象。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/fuwuqi/)

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/fuwuqi/)

什么是linq技术? 图老师

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

 

  ListmytestData mydata = new ListmytestData();

 

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

 

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

 

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

页面效果:

 

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

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

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

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

    //2、投影--对象类型            //注意:这里的IEnumerablestring中已经将matchs申明为了string类型,说明返回的是string的迭代对象            //IEnumerablestring 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 过滤和排序             IEnumerablemytestData matchs;             matchs = from student in mydata  //student是查询mydata集合中的对象的假名                      where student.age  20    //查询过滤条件                       orderby student.age   //排序                      select student;                                  //页面绑定数据展示             GridView1.DataSource = matchs;             GridView1.DataBind();

分组和聚合:如果对返回数据进行分组则返回的是分组对象的IEnumerableT集合,每个组实现IGroupingT,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是一个迭代IGoupingT,K对象,每个组又是IEnumerablemytestData对象                          select new { age = g.Key, avergeage = g.Average(student = student.age) };                                  //页面绑定数据展示             GridView1.DataSource = matchs;             GridView1.DataBind();

来源:http://www.tulaoshi.com/n/20160331/2051602.html

延伸阅读
标签: 软件教程
相信很多人都没听说过LiFi,那么LiFi和我们现在用的WiFi有什么不同呢?如今,网络已将它的触角延伸至我们生活里的每个角落,尤其在Wi-Fi时代,网络更是成为无数人生活里大部分时间的占有者,下面我们一起来看看什么是LiFi。 可以说,从2G、3G至4G时代的快速来临,Wi-Fi技术起了巨大的推动作用是毋庸置疑的。 ...
标签: 眼部护理
眉毛的形状天生各异,有长有短,有宽有细,跟眼睛的美观有很大的关系,所以有很多人都会去纹眉,因这样既不用去画眉又可以一直保持眉毛的形状美观,是整个眉眼看起来非常美丽。现在求医在线小编就来跟大家说说纹眉的技术要领有哪些吧? 1、眉型设计是关键: 纹出的眉是否理想,关键在于眉型设计。如果不按照顾客眉毛自身的特点...
案例分析 图钉提问: 很想隆鼻,特请医生回答以下问题,谢谢! 想得到帮助:1.注射隆鼻一次能够维持多久?需要定期注射吗?2.临床有哪些副作用?3.如果当事人皮肤有荨麻疹可以进行这个手术吗?如果可以且需要哪些防护措施?4.需要等待修复期吗?一般多久可以完全修复看不出来?5.相比假体隆鼻最大的反差效果及容易出现的问题有哪些?6.危险性...
什么是? 什么是子宫破裂?       子宫体部或子宫下段在妊娠期或分娩期发生破裂称为子宫破裂(rupture of uterus)。多发生在分娩期,与阻塞性分娩、不适当难产手术、滥用宫缩剂、妊娠子宫外伤和子宫手术瘢痕愈合不良等因素有关,个别发生在晚期妊娠。子宫破裂为产科最严重并发症之一,常威胁母儿生命。 ...
什么是?       什么是胎位不正?      胎位,通俗地来说就是胎儿在子宫内的位置。胎儿出生前在于宫里的姿势非常重要,它关系到孕妇是顺产还是难产。子宫内的胎儿是浸泡在羊水中的,由于胎儿头部比胎体重,所以胎儿多是头下臀上的姿势。 通常,医学上称枕前位为正常胎位,胎儿背朝前胸向后,两...

经验教程

198

收藏

46
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部