一起谈.NET技术,学习Linq经验总结

  Linq有很多值得学习的地方,这里我们主要介绍学习Linq,包括介绍Linq目标是实现语言与数据的深度结合等方面。

  上一个系列讲了C#3.0的新特性,为学习Linq做好了铺垫;接下来的一段时间转入学习Linq,上述新特性也会在介绍的过程中提及到。

  学习Linq

  在我们的软件中,数据的重要性不可言喻,特别是象ERP,CRM等等这类商业应用软件就是围绕着数据转;然而数据的来源各种各样,如存放在内存中的业务对象、存放在xml文件的数据、SqlServer关系数据库...这些数据源的读取操作各不相同,相互之间的转换也不是那么容易;为此VS.Net提供了各种技术来支持这些数据源的操作,如操作数据库的ADO.Net,操作xml文件的API(XmlDocument, XmlReader, XPathNavigator等),以及一些存放在内存中的数据的操作(数组,参数变量,类,泛型等等);如今在C#3.0中提供了一种新技术来整合处理各种数据操作的问题,这就是Linq;

  Linq目标是实现语言与数据的深度结合,Linq以统一的数据访问方式访问各种数据源,以相同的方式读取数据,象SQL语句一样进行查询,而这些都是整合在我们熟悉的编程语言如C#,VB当中,另外Linq是使用强类型,并提供编译时检查和VS的智能感知特性等。

  下面我们以SQLServer为数据源,列举一段代码分析一下:


1. // ADO.NET中我们会用它提供的SqlConnection, SqlCommand,
SqlDataAdapter,SqlReader, DataSet, 和 DataTable等来访问操作数据库 ;
2. //使用SqlDataAdapter填充DataSet
3. using (SqlConnection conn = new SqlConnection(""))
4. {
5. DataSet ds = new DataSet();
6. SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Customers", conn);
7. da.Fill(ds);
8. }
9. //使用SqlDataReader读取数据
10. using (SqlConnection connection = new SqlConnection(""))
11. {
12.
13. connection.Open();
14. SqlCommand command = connection.CreateCommand();
15. command.CommandText =
     @"SELECT Name, Country FROM Customers WHERE City = @City";
16. command.Parameters.AddWithValue("@City", "Paris");
17.
18. using (SqlDataReader reader = command.ExecuteReader())
19. {
20. while (reader.Read())
21. {
22. string name = reader.GetString(0);
23. string country = reader.GetString(1);
24.
25. }
26. }
27. }

  这段代码中,我们只是一个简单的数据读取,不管是使用SqlDataAdapter还是SqlDataReader都会碰到一些问题:

  1.如果直接在代码里写语句,不能确保语句的正确性,连基本的SQL语句的关键字也不能保证是否书写正确;而在Linq中把一些常用的关键字如Select、from、where等写成扩展方法,确保在编译时提供语句的验证;

  2.查询时使用的参数,和查询返回的结果都是弱类型,而在我们面向对象编程中希望能使用强类型来确保我们程序的正确,这样就需要很多的辅助判断来确保我们传入的参数和得到的结果是符合相应的类型要求;而我们在Linq使用的都是强类型,可以避免这些多余的判断,确保程序能得到编译器的验证,不会等到运行时才捕获到错误;

  3.最大的问题是,这段代码只适合SQLServer使用,如果使用其它数据库(Oracle,MySQL...),或者其它数据源(xml,文本文件...)就会改动较大,或者重新写方法才能使用,而使用Linq可以有效避免这些问题。以上是学习Linq。

时间: 2024-10-05 05:59:40

一起谈.NET技术,学习Linq经验总结的相关文章

学习Linq经验总结

Linq有很多值得学习的地方,这里我们主要介绍学习Linq,包括介绍Linq目标是实现语言与数据的深度结合等方面. 上一个系列讲了C#3.0的新特性,为学习Linq做好了铺垫:接下来的一段时间转入学习Linq,上述新特性也会在介绍的过程中提及到. 学习Linq 在我们的软件中,数据的重要性不可言喻,特别是象ERP,CRM等等这类商业应用软件就是围绕着数据转:然而数据的来源各种各样,如存放在内存中的业务对象.存放在xml文件的数据.SqlServer关系数据库...这些数据源的读取操作各不相同,相

一起谈.NET技术,Linq学习笔记

写在前面 其实在09年就已经学习过Linq了,并被她那优美的语法所吸引,只是现在所在的公司还在使用VS2005在.Net2.0的框架下面的开发,所以Linq也很久没有用过了,最近看部门的同事对这个有些兴趣,所以打算整理点东西出来跟大家一起做个分享. 什么是Linq LINQ是Language Integrated Query的简称,它是集成在.NET编程语言中的一种特性.已成为编程语言的一个组成部分,在编写程序时可以得到很好的编译时语法检查,丰富的元数据,智能感知.静态类型等强类型语言的好处.并

一起谈.NET技术,LINQ to SQL快速上手 step by step

前言       最近接连遇到几个朋友问我同一个问题,就是关于.NET平台上ORM框架的选择.我想在这个讲求效率的时代,谁也不想手写SQL或存储过程去访问数据库了.大家都知道,在Java平台上,ORM这一块基本是Hibernate的天下.当然,相对轻量级的iBatis也有不错的表现.      不过谈到.NET平台,ORM框架似乎相对混乱了点.很多朋友问我的时候,往往会这样问:NHibernate.NBear和Castle该选择哪个?而当我反问:为什么不适用微软自带的Linq to Sql呢?对

一起谈.NET技术,Linq To SQL 批量更新方法汇总

方法一.官方例子 地球人都知道的,也是不少 Linq To SQL 反对者认为效率低下的一种方法. NorthwindDataContext db = new NorthwindDataContext(); var customers = db.Customers.Where(c => c.CustomerID.StartsWith("BL")); foreach (var customer in customers) { customer.Address = "Gua

一起谈.NET技术,Linq to SQL T4 代码生成器 (二)访问设计器中的 Table 对象

在上一篇文章中,介绍了如何访问 DataContext 对象,下面接着来讲解一下如何访问设计器中的表对象,并生成生体类代码.从 Northwind 数据库中拖一个表到设计器中.拖出来后,记得保存 dbml 文件,否则是无法访问到这个表的. 在这里拖的是 Catories 表,如下图所示: 我们可以通过访问 DataContext.Tables 来访拖放到设计器中的表.代码如下: <# foreach(ITable table in DataContext.Tables){ }#> 现在再来看看

一起谈.NET技术,Linq to SQL T4 代码生成器 (-)访问 DataContext 对象

这个工具,是在一个项目中提取出来的,现在免费提供给大家使用. 本文介绍的 Linq to SQL T4 代码生成器有如下特点: 1.支持 dbml 文件.能够访问 dbml 设计器中的对象. 2.可能通多修改模版来生成代码. 3.可以生成多个文件.比如:一个类一个文件. 准备: 1.T4 代码编辑器(goole 即可).尽管不是必须,但是为了方便代码的编辑,还是建议安装一个. 2.下载安装 Decode_VS2008 (必须). 开始: 1.创建一个项目.然后运行 LicenseFileGene

一起谈.NET技术,【经验总结】C#常用线程同步方法应用场景和实现原理

简单描述volatile,Interlocked,lock,Mutex,Semaphore,Spin lock,AutoResetEvent,ManualResetEvent,ReaderWriterLockSlim,MethodImplAttribute,WaitHandle常用同步机制的原理和使用场景. volatile 只是C#的一个关键字,告诉编译器不能将声明的这个变量进行CPU内部缓存,只能在主内存中操作,类型有限制,volatile并不能实现真正的同步,因为它的操作级别只停留在变量级

谈一谈网络编程学习经验

建议大家去看原文:http://cloud.github.com/downloads/chenshuo/documents/LearningNetworkProgramming.pdf 1 谈一谈网络编程学习经验 陈硕 giantchen@gmail.com blog.csdn.net/Solstice weibo.com/giantchen 2012-02-13 本文谈一谈我在学习网络编程方面的一些个人经验."网络编程"这个术语的范围很广,本文指用 Sockets API 开发基于

P2P直播、点播技术学习经验

自8月份以来一直埋头学习P2P在音/视频直播.点播上的学习,受到不少网友的帮助,在此也留下自己学到的一点点的经验.          第一个接触的开源项目是peercast,应该说上手非常快,这必须感谢王浩聪的注释版,稍做调整后便架起了自己的广播平台,运行起来效果也很理想.于是尝试发布视频流,在局域网内测试未发现问题,但是拿到广域网上问题马上出来了,播放要么中断.要么缓冲.        于是,仔细学习代码的相关流程,网上也查了一些资料,发现peercast的网络模型为树形,而视频所需要的上传流