会写这一篇是有原因的,不只一次有人问我,要不要学LINQ呢?
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
LINQ看起来很难耶……为何要放弃以前的SQL来学LINQ呢?到底LINQ的意义是什么?
反正就是有很多的问题,说真的,由于最近也没时间写本LINQ的书,但是工作累了顺手写写BLOG还可以,所已针对LINQ这个主题,和大家有一些分享。
其实对于VB开发人员来说,掌握LINQ说真的比C#来的简单很多,主要的原因就是VB当中有非常多"自动"的隐含型别转换,是不需要写程序代码的,也因此操作起来比起C#真的容易不少。
要掌握LINQ的精神,得要知道LINQ出现的目的,其实很简单,只有一句话,就是希望 "能够达成以单一的一种语法来查询多种不同的对象" 的目的。过去我们要查询数据库要用SQL、要查询XML要用XMLDOM对象、要查询AD又要用另一种不同的查询方式,总之,查询这个动作一天到晚出现在计算机程序代码当中,但是开发人员却要学习多种不同的方式,很困扰,所以LINQ就出现了。
所谓的LINQ,是 .NET Language Integrated Query,也就是在.NET的开发语言当中,直接把查询的技术给 "整" 进去,目的就是要加快搜寻(速度)与降低开发成本。
所以从.NET 3.5开始, LINQ变成.NET标准语法的一部分,OK,就是这样,所以我们来看看 LINQ怎么查询,首先,为了展示LINQ,我定义了底下这样的结构:
Structure BMI
Dim name As String
Dim height As Integer
Dim weight As Integer
Dim BmiValue As Single
End Structure
你用类型也可以,总之上面的结构用来表达一个人的身高,体重,名称和BMI值。
接着,我编写底下程序代码:
'定义数组
Dim matrix(5) As BMI
'填入测试资料
matrix(0).name = "王小宝"
matrix(0).height = 170
matrix(0).weight = 65
matrix(1).name = "韦大宝"
matrix(1).height = 176
matrix(1).weight = 95
matrix(2).name = "章新宝"
matrix(2).height = 150
matrix(2).weight = 55
matrix(3).name = "沈中宝"
matrix(3).height = 192
matrix(3).weight = 75
matrix(4).name = "萧敦宝"
matrix(4).height = 150
matrix(4).weight = 65
matrix(5).name = "林宝宝"
matrix(5).height = 177
matrix(5).weight = 75
上面这段程序代码就只是很简单的把数据填入,请注意我们只填入身高体重和姓名,接着,再利用底下的程序代码算出BMI:
'计算BMI
For i = 0 To 5
matrix(i).BmiValue = matrix(i).weight / (matrix(i).height / 100) ^ 2
Next
OK,到这边先告一个段落,以上都没有LINQ出现,动作也很简单,接下来换LINQ出场,在出场前先问读者一个问题,如果要找出BMI值>25的数据,你会怎么写程序?
没错,用for each指令,在没有LINQ功能的时代,我们只能用数组遍历的方式查找每一个元素,找出符合的数据,但是有底下几个问题:
1.为了找出特定的数据而跑整个数组,看起来挺蠢的。(不过说真的,如果数据没有排序,也就只能那么蠢)
2.可能有一些初学的菜鸟程序设计师,写出效率很差的查找程序。(例如不小心在for each当中做了一些不必要的动作)
OK,过去我们对于对象(或是对象数组)的操作,也就只能使用循环的方式,但是LINQ提出了一种新的可能,就是通过类似SQL的查找语法,让开发人员可以用简单的程序代码,就可以针对对象进行复杂的查询。(更重要的是,未来这种简单的查找语法变成主流之后,可以用以查询"各种不同的对象",而不只有查找"对象")
言归正传,若要查找出BMI值>25的数据,你可以透过底下的LINQ程序:
'查询BMI值大于25的人
Dim result = From c In matrix Where c.BmiValue > 25
结束,就是这样,而 result 就是找出的结果对象,你可以通过 result 来取得每一个符合条件的资料。简单的说,上面这段程序代码的意思是,从matrix对象集合当中,找出一些数据,这些数据的BmiValue属性大于25。其中的 c 只是编写程序代码方便,c代表该对象元素,你也可以用别的字眼..
而找出的数据result也是一个集合,你可以通过底下的程序代码来列出每一个BMI值符合条件者的名字:
'显示名称
For Each item In result
MsgBox(item.name)
Next
很简单不是吗? result 当中的每一个 item ,其型别就是 BMI,因为Result对象是LINQ语法跑出的结果,所以只有包含符合 BmiValue > 25 这个条件的人……
上面这段程序代码,还可以这样写……
'显示名称
For Each item In (From c In result Select c.name)
MsgBox(item)
Next
效果完全一样唷,但是,(From c In result Select c.name) 会产生一个对象,该对象只有符合条件者的名称(相当于一维数组),而item的型别当然就是string。
通过上面这样的指令,查找动作变得相当简单,还不仅如此,关键在于底下这样的语法:
'查询BMI值大于25的人
Dim result = From c In matrix Where c.BmiValue > 25
具有相当多不同的变化方式,可以组合出各种不同的形式,发挥出强大的查找力量,再加上学一次,就可以用在各种不同的地方(这边我们只用来查找对象,其实也可以查找XML和Database),使得LINQ的用途更加的广泛,这就是LINQ的价值与意义。
以后,再跟大家分享一些关于LINQ的其他部分,希望对大家有帮助,VB developer其实是幸福的,LINQ其实是很简单的……
分享到:
相关推荐
要实现Ext Grid的远程排序其实很简单,只要修改查询语句的排序关键字就可以了,但是,如果你的项目是使用Linq进行开发的,会发现动态修改排序关键字并不是那么容易的事,解决办法就是使用LINQ Dynamic Query Library...
ORM框架,就是转化成SQL执行等等,其实这是对LINQ的 误解,我想用这个例子程序说明,LINQ没有那么神秘, 它就是C# 3时代的一种简单语法,它可以融入到程序的 每个角落。大家可以放心大胆地使用LINQ简化开发,书 写...
通过以上内容,我们了解了 Dynamic LINQ to NHibernate 的基本原理、核心方法以及其实现细节,同时也讨论了一些性能优化策略和最佳实践。这些知识点对于希望在实际项目中应用 Dynamic LINQ to NHibernate 的开发人员...
### LINQ_to_SQL语法及实例大全 #### 一、LINQ_to_SQL简介 **LINQ to SQL** 是 Microsoft .NET Framework 提供的一种用于在 C# 或 VB.NET 中编写数据库查询的强大工具。它允许开发人员使用一种类似于 SQL 的语法来...
多数据源及多数数据库变动支持不是很方便 Nhibernate 国外第三方支持 历史悠久( java hibernate),后续版本支持LINQ 使用麻烦、配置一堆、学习成本大 Moon....
4: 本书把C# 3.0中的新特性也很好地融入内容,非常好,比如lamda表达式和Linq,对于ASP.net开发支持非常有力,但是基本上ASP.net的相关资料中,都不会详细介绍它们的原理,使你感觉很难理解,而这本书则从最基础的...
像ipconfig /all 这样的CMD命令想必大家都知道,但是很多童鞋可能不知道怎么写这样的控制台带参数的程序,其实很简单,我们先看建立项目的默认代码: 代码如下: using System; using System.Collections.Generic; ...
简单说了下数据库的数据依赖缓存,这个其实我也没搞懂.只是做了个简单的介绍.还有一个简单的Demo.数据库自建吧.里面有用到linq的DBML. --本人只是入门级菜鸟,资源免费.大侠们别嘲笑,别打击我好学的积极性.
Json数据转换为ADO.NET DataSet其实方法有很多,Newtonsoft.Json也提供了DataSet的Converter用以转换Json数据。但是有些情况下DataSet Converter并不管用,而且也不一定能够满足项目需要。这里介绍另一种简单有效的...
这样我们可以将我们程序分摊到多个计算机CPU中去计算,在过去并行化需要线程的低级操作,难度很大,在.net4.0中的增强了对并行化的支持,使得这一切变得非常简单 。本次我从以下几个方面大家讲以下.NET 并行 1. ...
4. **LINQ to JSON**:提供了一种使用LINQ查询JSON文档的方法,使得操作JSON数据如同操作.NET集合一样简单。 5. **自定义转换器**:允许开发者自定义转换器,以便处理特定类型的序列化和反序列化需求。 6. **性能...
.NET Framework 3.0虽然在版本号上看似是从2.0升级而来,但其实它主要是在2.0的基础上添加了四个新的技术子集,即WPF、WCF、WF和CardSpace。WPF是一种全新的用户界面框架,使用XAML语言来描述UI,提供了丰富的图形和...
相信大家对委托并不陌生,委托其实就是一种定义方法签名的类型;有关于委托的详细介绍,大家可以参考MSDN中作出的介绍,链接为:http://msdn.microsoft.com/zh-cn/library/vstudio/ms173171.aspx。这里我就不做具体...
C#语言程序设计基础知识是IT领域中不可或缺的一部分,它为开发者提供了一种高效且安全...通过不断学习和实践,开发者可以深入理解C#的高级特性,如委托、事件、泛型、LINQ等,从而提升编程能力,实现更复杂的软件系统。
- **LINQ**:即 Language Integrated Query 的缩写,提供了强大的查询表达式功能,可以方便地对数据集合进行筛选、排序等操作。 - **异步编程**:使用 `async` 和 `await` 关键字来编写异步代码,提高程序的响应性和...
在Nhibernate中,一个类可以被标记为实体,其实例将成为数据库中记录的映射。 2. **映射(Mapping)**:Nhibernate通过XML或注解形式的映射文件定义实体类与数据库表之间的对应关系。映射文件包含了字段映射、主键...
委托在C#中其实是一个类,它实现了对方法的引用。委托类提供了Invoke、BeginInvoke和EndInvoke三个关键方法。Invoke用于同步执行,而BeginInvoke和EndInvoke则用于异步操作。委托的声明通常使用`delegate`关键字,与...
QQ协议是腾讯公司为其实时通讯软件QQ所设计的一套通信协议,包括但不限于文本消息、文件传输、好友管理等功能。为了实现QQ机器人的功能,我们需要了解这些协议的具体细节。 ##### 2.1 协议解析 - **HTTP接口**: QQ...
并发(英文Concurrency),其实是一个很泛的概念,字面意思就是“同时做多件事”,不过方式有所不同。在.NET的世界里面,处理高并发大致有以下几种方法: 1. 异步编程 异步编程就是使用future模式(又称promise)...
在这个例子中,我们首先创建了一个包含几个人的`List<Person>`,然后使用LINQ查询语法对这些人按年龄排序。 #### StringWriter实现的一个功能 `StringWriter`是`System.IO`命名空间下的一个类,用于将字符串视为流...