版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C#3.0程序设计,日程,C#3.0的基本新功能 LINQ技术的引出传统的数据查询方式 使用LINQ语句来实现方便的查询功能,C#3.0的基本新功能,隐式类型化的本地变量(Implicitly Typed Local Variables)及匿名类型(Anonymous Types ) 对象及集合初始化器(Object and Collection Initializer) 扩展方法(Extension Methods ) 分布类及方法(Partial Classes and Methods ),隐式类型化的本地变量及匿名类型,在C#3.0中本地变量可以利用var关键字来定义变量,该变量不是“变
2、体类型”,该变量的类型根据变量的值在编译的时候确定。,在上面最后一行代码中,可以看到,var 关键字常常 与匿名类型联合使用,匿名类型,使用匿名类型,可以不用事先定义一个类,就直接使用一个类的属性。匿名类型很方便的提供了对只具有一系列只读属性的类的封装。该类型是编译时生成,所以在代码层是无法查看其类型的。 注意:匿名类型通常用于LINQ语句,对象及集合初始化器,对象初始化器 在C#3.0中可以直接对象被构造的时候给实例中的属性或字段进行初始化。,对象及集合初始化器,集合初始化器 C#3.0中对于集合类型的初始化,也可以像数组一样在构造的时候进行。,扩展方法(Extension Methods
3、),扩展一个类的方法通常是利用一个类继承自某一个基类,再去添加一个新方法,或者直接重写基类,并重新编译。 但是C#3.0中扩展一个类中的方法变的更简单,可以直接为一个现有的类添加方法,这个类可以是: 系统内置的类型 自定义类型 任何第三方类型 甚至是一个Sealed类型。 扩展方法是一个定义在静态类中的静态方法,但是在使用的时候却和在原有类型中定义的一样。,扩展方法(Extension Methods ),实例操作:扩展string 类,并实现可以获取字符串中所有英文字符的扩展方法,分布类及方法(Partial Classes and Methods ),在C#2.0里添加了partial c
4、lass的功能,即开发人员可以利用partial关键字将一个类分为多个部分来实现。 在C#3.0中,方法前可以添加一个partial关键字,这样可以在某些情况下可以将方法的定义放在一部分类中,实现在另一部分类中。 限制: 分部方法的返回值为void 分部方法可以使用ref实现参数引用,但是不能用out关键字 分部方法要声明为私有,因此则不能为virtual 分部方法可以是static的以及unsafe的 可以在泛型中使用分部方法 不可以利用 Delegate指向分部方法,LINQ查询的引出,传统的数据查询技术往往能过以下几种方式表达 以面向过程试直接查询,直接输出 以面向对象方式进行封装,并返
5、回查询结果 以O/R的方式实现数据的查询(如自定义的业务逻辑,NHibernate),以面向过程试直接查询,直接输出,此种方式教学中常用,表达直观,实际应用性不强,以面向对象方式进行封装,以O/R方式进行OO的封装,所谓的O/R,就是指一个类实体和数据库的一条记录之间形成一个对应的关系,在典型的“三层架构”中,业务逻辑往往充当了这个“O”,而数据访问层则充当了实体“O”和数据库中一条记录中间的桥梁。 下面我们来看一个典型的“三层架构”的实例。 典型管理模式:,User类,UserManager类,数据访问层类,数据库,原始O/R方式的问题,从上面的例子中,我们通过观察可以发现,无论是自己以手写
6、业务逻辑的方式,还是利用Nhibernate的方式,都要自行编写大量的代理,而开发人员往往会把精力放在代码的实现,以及逻辑的正确性上。,User类,UserManager类,数据访问层类,数据库,花费精力编码及测试,C#中对O/R方式的集成,LINQ语句中集成了前面所有例子中的“业务逻辑”及“数据访问”的抽象。,使用LINQ语句来实现方便的查询功能,日程 利用LINQ技术实现对数据库的查询(LINQ To ADO.NET) 利用LINQ实现对XML查询(LINQ To XML) 利用LINQ实现对象列表的查询(LINQ To Object),利用LINQ技术实现对数据库的查询,利用LINQ技术
7、实现数据库的查询,可以分类以下两类 LINQ To DataSet LINQ To Sql LINQ To XML,LINQ To DataSet,LINQ To DataSet,实际上是利用了传统的ADO.NET2.0与LINQ语句相结合的方式来实现查询的,1.单表查询,LINQ技术的数据源一定要基于IEnumerable接口,或者是Iqueryable接口。但是DataTable并没有继承自这些接口,因此,要想使用DataTable 作为数据源,并利用LINQ技术中的“From”语句对其进行查询,就要调用DataTable类的AsEnumerable()方法。,LINQ To SQL,LI
8、NQ To SQL技术可以直接将一个类映射到数据库中的记录。,UI,LINQ TO SQL,DB,Object,SQL,DataContext类,在LINQ To SQL中主要是使用DataContext类来连接数据库。DataContext可以从数据库中将记录转化为一个对象,还可以将对象的改变回发给数据库。我们可以将其视为ADO.NET中的SqlConnection类。事实上,可以利用一个IDbConnection接口的派生类来初始化,或者直接利用连接字符串初始化。 使用DataContext类的目的是将所请求的对象转换成目标数据库的SQL语句查询,然后还可以将查询得到的结果返回给我们操作的
9、对象。,数据操作,数据操作 执行选择性操作 执行非选择性操作,选择性操作,LINQ TO SQL的重点在于如何将一个类的实例(对象)映射到一条记录上。在执行选择性操作时要考虑到以下两点问题: 如何实现类的映射 如何实现选择 将一个类的实例映射到一条记录上有的方法如下: 在定义类及类的属性的时候可以利用System.Data.Linq.Mapping命名空间中的特性类来对其进行修饰即可。,利用特性修饰对象以实现映射,利用Table特点说明该类对应的表,利用Column特性说明该属性对应表中的哪个字段,进行选择操作,执行选择性操作的方式和前面提到的LINQ TO DataSet的操作基本一致,执行
10、非执行性操作的基本思想,数据库,内存,内存表,界面或其他业务逻辑,添加一个对象,对查找到的对象进行修改或删除,在内存中查找对象,将新添加的对象,修改的对象回推到内存中,查找并加载到内存,将添加或修改的记录回推到数据库中,执行非选择性操作,如果用户比较熟悉如何利用DataAdpter来实现数据的非选择性操作,那么就应该能很快的过度到LINQ To SQL的非选择性操作上来。,执行非选择性操作,复杂的对象映射,前面的例子中,我们选取的数据表为users表,该表中仅仅有3个字段,这个时候我们手工的编写一个类用于实现与该表中的一条记录进行映射。 考虑到在真正的工作中,数据库中的字段数量及表与表之间的关
11、系会比较繁多和复杂,这个时候手工编写映射类是比较困难的。 VS2008中为我们提供了映射类型生成的可视化工具 可视化工具的使用 生成映射类 数据库中存储过程及函数的封装,Lambda表达式,请见如下简化操作:,匿名方法,在C#2.0中,引入了匿名方法。使用匿名方法,开发人员可以直接在委托初始化的时候去声明函数代码,而不必使用委托的构造函数去指明要调用的函数。,Lambda表达式,Lambda表达式是一种匿名函数,这种匿名函数可以指向表达式或者代码段,还可用来委托或者是表达示树。 所有的Lambda表达都利用“=”作为操作符(读作“转向”),该操作符的左侧相当于函数的输入参数(如果有的话),右侧
12、是表达式或者代码段。 如:X=X*X,X是输入 的参数,该Lambda表达式返回的是X的乘方。,具备标准查询操作符的Lambda表达式,许多标准的查询操作符都有一个输入的参数Func。 Func是一个泛型委托,该委托中第一个类型参数是所指函数输入的参数,第二个泛参数是指函数的返回值类型。 操作实例: 利用Func委托指向一个普通方法 利用Func委托指向一个匿名方法 利用Func委托指向一个Lambda表达式,Table泛型类的扩展方法,DataContext.GetTable()方法从我们指定的数据表中选出数据,并将数据缓存在Table类的一个实例中。 在Table类中,为使用者提供了一系列扩展方法,其中很多是用于Lambda表达式查询的。下面来看一下MSDN的描述。 通过查看,我们可以发现,这些查询方法中会接收一个Func类型的参数,并且返回可以进行枚举的接口派生类实例。,实例操作,利用Lambda表达式实现对于Customers表的选择操作。,LINQ TO SQL综合实例,下面我们利用C#3.0中提供的LINQ技术结合.NET FrameWork3.0中提供的WPF技术来实现一个例子。 操作要求: 利用LINQ及WPF实现对用户数据的添加,修改,删除以及显示用户数据的最新值 。,LINQ T
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026上海交通大学公共卫生学院栾洋课题组博士后招聘备考题库(模拟题)附答案详解
- 2026广东河源市妇幼保健院招聘合同制专业技术人员25人备考题库带答案详解(新)
- 2026中共湖南省委党校(湖南行政学院)招聘高层次人才17人备考题库及参考答案详解(培优)
- 2026安徽滁州市中小学新任教师招聘240人备考题库含答案详解(考试直接用)
- 2026云南玉溪市文化和旅游局城镇公益性岗位招聘2人备考题库及答案详解(全优)
- 2026福建龙岩上杭县古田会议纪念馆公开招聘见习人员3人备考题库及参考答案详解(典型题)
- 项目成果完成保障承诺书(4篇)
- 2026上海市闵行区华漕学校教师第二批招聘备考题库及参考答案详解
- 2026浙江丽水市松阳县国盛人力资源有限公司招聘专职消防员3人备考题库附完整答案详解【夺冠】
- 2026上海交通大学公共卫生学院栾洋课题组博士后招聘备考题库附参考答案详解(突破训练)
- 初中家庭教育课件
- GB/T 45103-2024肉鸭营养需要量
- 《水库大坝震后安全检查技术指南》
- 第8章 古工程景观鉴赏
- DB 5103T 50-2024 学校食堂食品安全管理规范
- DL-T+961-2020电网调度规范用语
- DB53-T 1253-2024 密集烤房梳式烟夹使用技术规程
- 海洋工程领域新材料与技术
- 排水池、排泥池工艺计算案例
- 风险和机遇识别、评价及控制措施表
- 医院物业组织架构与人员配备
评论
0/150
提交评论