LINQ其实很简单

 

会写这一篇是有原因的,不只一次有人问我,要不要学LINQ?

 

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

 

具有相当多不同的变化方式,可以组合出各种不同的形式,发挥出强大的查找力量,再加上学一次,就可以用在各种不同的地方(这边我们只用来查找对象,其实也可以查找XMLDatabase),使得LINQ的用途更加的广泛,这就是LINQ的价值与意义。

 

以后,再跟大家分享一些关于LINQ的其他部分,希望对大家有帮助,VB developer其实是幸福的,LINQ其实是很简单的……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值