csharp与.net编程专题讲座开发技术第30章wpf框架_第1页
csharp与.net编程专题讲座开发技术第30章wpf框架_第2页
csharp与.net编程专题讲座开发技术第30章wpf框架_第3页
csharp与.net编程专题讲座开发技术第30章wpf框架_第4页
csharp与.net编程专题讲座开发技术第30章wpf框架_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

30章LanguageIntegratedQueryLINQ,是微软在新一代的框架体系中提供的一种语言LINQ查询功能,开发人员可以在对象领域和数据领域建立起询。本章将从LINQ的概述、语法、应用以及最终的应用场景来介绍LINQ技术。LINQ查询是通过查询表达式完成对数据源的数据检索功能,在.NET3.5LINQ通过提供一种跨各种数据源和数据格式使用数据的一致模型,使得在框架中进LINQ查询中,始终会用到对象。可以使用相同的基本编码模XML文档、SQL数据库、ADO.NET数据集、.NET集合中的数据以及对其有LINQ提供程序可用的任何其他格式的数据。LINQ查询语法,定义本次查询的内容。除了查询数据执行查询是指最终的查询语句的运行。查询变量本身只是查询命令,实际的查询据库。在应用程序中,可以创建一个检索数据的查询,并可以按某一时间间隔反复执LINQ查询是一种通用的查询语法,它可以在程序的任意逻辑中使用。本节将通过一个控制台应用程序来实现LINQ查询的应用介绍。staticstaticvoidMain(string[]{int[]numbers=newint[7]{0,1,2,3,4,5,6varnumQueryfromnuminnumbers//指定查询对象where(num20//指定查询条件selectnum;//选择查询结果foreach(intnumin{Console.Write("{0,1num);}}在上面的代码中,首先定义了一个整型的数组对象numbers,以此作为数据源进行后句后续定义了一个查询临时变量,用于定义数据源中的查询临时数据。in语句指定了查询变量查询变量对象numQuery,执行查询,将符合条件的查询结果显示到控制台中。30.1LINQLINQ础上。借助于LINQ,查询已是高级语言构造,就如同类、方法、等。对于编写查询的开发人员来说,LINQ最重要的部分是查询表达式。查询表达式是使SQL数据库、ADO.NET数据集、XML文档和流以及.NET集合中的数据。C#SQLXQuery关键字使join或group子句的结果能够充当同一查询表达式中附加查询子句的LINQ查询的一项规则,建议尽量使用查询语法,只在必需的情况下才一个排序子句,但不对源元素进行转换,select子句结束了该查询。int[]scores={90,71,82,93,75,82 fromscoreinscoreswherescore>60fromscoreinscoreswherescore>60orderbyscoredescendingselectforeach(inttestin foreachToList方法进行转换,(fromcountryincountries fromcityincountry.Cities wherecity.Population>10000 selectcity) 询前面的所有分数中的最高得分,可以通过Max方法来获取到,代码如下:intinthighestScore(fromscoreinscoresselectscore)Selectgroupby语句实现对结果进行分组。varvarqueryCountryGroupsfromcountryincountries groupcountrybycountry.Name[0];//分组查询结果fromcountryincountries//指定查询对象orderbycountry.Area>500000,//指定查询条件country.Populationdescending//查询结果排序select varvarcategoryQueryfromcatinjoinprodinproductsoncatequalsprod.Category//selectnewCategorycatNameprod.Name string[]names={"firstNamelastName"};IEnumerable<string>queryFirstNames=fromnameinletfirstName=name.Split(newchar[]{''})[0]selectfirstName;

LINQ的查询包括两种基本的语法,即查询语法和方法语法。查询语法是指在查询中select语句直接返回查询列表,而方法语法是对于查询结果的一些统计功能,如求和SumMaxMinAverage等。在查询中,二者可以分别独30.2.1节中介绍了查询语法和方法语法的一些使用方式。本节将通过一个完整的实例介绍如何使用查询语法和方法语法进行LINQ的查询。fromnuminnumbers//指定查询对象wherenum<3||num>7//指定查询条件select ine("查询1结果:");foreachintintTempinfilteringQuery){ }//2,定义查询条件IEnumerable<intorderingQueryfromnuminnumbers wherenum<3||num> orderbynum selectselect foreach(intintTempin string[]grou Query={"apple","banana","orange","pear","strawberry"};fromitemin<char,string>>queryFoodGroupsgroupitemby ine("3结果:");//foreach(IGrou <char,string>miinqueryFoodGroups) 31个查询表达式演示如何where73的所有23个表达式演示如何按照键对结17,12,10doubleaverage=IEnumerable<intconcatenationQuerynumbers1.Concat(numbers2); ine("查询5结果:");foreach(intintTempin foreach(intintTempin 34Average方法获取数据源lambda表达式进行查询。intnumCount1=(fromnuminnumbers1wherenum<3||num>7selectnum).Count();IEnumerable<int>numbersQuery=fromnuminnumbers1wherenum<3||num>7selectnum;intnumCount2=7属于查询语法和方法语法的混合查询。Count使用的是方select37的数据30.2使用LINQ通过实例介绍如何通过LINQ实现数据的合并。classclass{publicstringName{get;set;publicintID{get;set;}class{publicstringName{get;set;publicintID{get;set;}创建第一个数据源List<A>a=new{newAID=1,newA{ID=2,newA{ID=3,newA{ID=4,List<B>b=new{newB{ID=1,Name="Mary"},newB{ID=2,Name="Jane"},newB{ID=3,Name="Kate"}SameID=AinA.ID1Binb foreach{}30.3LINQ使用LINQLINQ不仅可以查询数据,修改查询结果,而且可以用来完成查询之后的数据转换功XML格式的数据。本节将通过一个实例来介绍如何实现LINQ对数据的转换。classclass{publicstringName{get;set;publicintID{get;set;publicList<int>}List<A>List<A>a=new{添加如下用于LINQ转换的代码:varAsToXML=new Ainletx= selectnewXElement("A",newnewnewXElement("Phones",//创建Phonesa结束"Root" 30.4LINQLINQ定义了查询语言,它可以通过对多种数据源对象进行查询,从而实现数据的高以下4种数据源查询的介绍,使读者可以更深入的了解LINQ在简单对象模型中查询的LINQToSQLLINQtoSQL中,关系数据库的数据模型映射到用开发人员所用的编程语言表示的然后将它们发送到数据库进行执行。当数据库返回结果时,LINQtoSQL会将它们转换回LINQtoSQL实现对数据库数据的查询。其中的descending参数表示为倒序排列结果。注意:SQLServerExpress程序。在“解决方案资源管理器”窗口中,右键单击LINQSqlDemo项目节点,单击30.5DemoDataBase.mdf数据库文件,以此30.5DemoDataBase.mdf文件,VisualStudio2008会弹出30.6所示。在弹出的创建数据表窗口中,分别添加ID、Name和 其中ID列为主键。创建完毕的数据表定义如图30.7所示。图30.6添加数据库新 图30.7定义数据库新单击菜单栏的“保存”按钮,在弹出的“选择名称”框中,输入表的名称菜单。在弹出的表内容中,输入实例数据,数据内容如表30.1所示。30.1DemoTable1234567[Table(Name[Table(Name="DemoTable")]publicclass{privateint[Column(Name="ID")]publicintID{ {return}类,并使用了属性[Table(Name="DemoTable")]{this._ID=}}privatestring[Column(Name="Name")]publicstringName{ {return}{this._Name=}}privatebool [Column(Name=" publicbool{ {return } { =}}}33个公有属性。每个公有属性都通过[Column(Name="××")]的语法进行标注,表明该属性对应的是数据表的某staticstaticvoidMain(string[]{ ontextdb=new>s=db.Log= >custQuery=.;s==foreach({ine("共查询{0}个结果", custin }}注意:代码中的DemoDataBase.mdf文件的路径应随着文件所在 本实例中的路径为运行实例时mdf文件所在的 代码中,首先通过Dontext类定义了一个用于数据库连接的实例,然后通过查询语法构建查询表达式,最后通过foreach遍历查询的结果。30.8LINQToSQLLINQToDataSetLINQtoDataSetDataSet对象中缓存的数据,使开发人员能够使用编程语言本身而不是通过使用单独的查询语言来编写查询,因为LINQtoDataSet可以简化查询。LINQtoDataSet也可用于查询从一个或多个数据源合并的数据。现LINQtoDataSet应用。privatestaticDataSetDataSetret=newDataSet();DataTabledataTable=newDataTable();dataTable.Columns.Add(newDdataTable.Columns.Add(newDfor(intolumn("Name",",DataRownewRowdataTable.NewRow()newRow["ID"]=n; //添加ID值newRow["Name""Name"+n.ToString();//Name值"]=值"]=returngetDataSet方法用于在内存中构建一个数据集对象,然后在该数据集中添加一个数据表,同时在表中添加10行数据,用于后续查询操作。staticstaticvoidMain(string[]{DataSetds=varquery=s=true//selectnew//{IDName=foreach(varitemin{ine("ID:{0}Name:: }}在where查询条件子句中,对列进行条件查询,同时通过Select语句,将查询结果创建到一个对象查询变量中,然后通过foreach语句,执行该LINQ查询。30.9LINQToDataSetLINQToXML在很多环境中,XML已广泛采用为格式化数据的方式。在Web上,在配置文件、OfficeWordXML。LINQtoXML经过了重新设计,是的XML编程方法。它提供文档对象模型的内存文档修改功能,支持LINQ查该XML文件的内容如下代码所示。 staticstaticvoidMain(string[]{XElementroot=fromelinroot.Elements("Data") letprice(decimal)el.Element("Price指定查询条件selectforeach(decimalelinprices)

对XML文件中的Price元素进行排序,并将查询结果显

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论