VB.NET查询包含威力强大
创始人
2024-06-21 12:31:20
0

在VB.NET新版本中,出现了很多新的特性,帮助开发人员极大的提高了编程效率。不过这些初衷都是为了迎合.NET Framework新的数据框架——Linq。Linq的一个口号是“让查询无处不在”,它将类似SQL的语法强类型地引入到Visual Basic中,而且可以任意组合使用。不要以为只是把数据库的SQL写到VB中而已,那样就太小看Linq了。VB的目标是让一切包含数据的对象都可以用类SQL查询,包含数据库映射对象(DLinq),XML(XLinq),甚至是.NET Framework中的一切集合对象。

我们来看一个VB.NET查询包含的例子。假如employee类有firstname,lastname和age等属性。现在有一个list(of Employee)类型的集合叫做emp。假设我们要查询所有Age大于25的员工的姓名。回忆一下前面我们介绍的特性怎么给查询带来新的变化。首先我们给IEnumerable增加扩展方法Where:

  1. < Extension()> _  
  2. Public Function Where()Function Where(Of T)([Me] As 
    IEnumerable(Of T), predicate As Func(Of T, Boolean))_  
  3. As IEnumerable(Of T)  
  4. Dim result As New Collection(Of T)  
  5. For Each Dim item In [Me]  
  6. If predicate(item) Then result.Add(item)  
  7. Next  
  8. Return result  
  9. End Function 

注意func,这是.NET Framework将会增加的一组泛型委托之一,用于On-the-fly创建各种参数个数和类型的委托,而不必声明新的委托类型。这里Func用于表示一个断言。于是我们就把条件查询封装了。与此同时,我们还可以封装一个Select方法,用于数据类型转换,以此类推,还可以有OrderBy和GroupBy等等……这些就成为Linq的查询算符。

回忆一下,我们还有嵌套函数,于是可以按下列方法使用查询算符:

 

  1. Function F()Function F(obj As Employee)As Boolean  
  2. Return obj.Age > 25  
  3. End Function 

Dim result = emp.Where(AddressOf F)这里稍显麻烦的就是,我们需要自己定义函数,这样进行复杂查询就会写得很累,即使可能会有lambda表达式帮助,我们也希望寻求更容易理解的方法,那就是VB.NET查询包含Query Comprehension。新引入的Select,Where等查询关键字可以帮你完成前面介绍的一整套内容:#t#

Dim result = Select It From e In emp Where e.Age > 25一个简单的类似SQL的语法就帮助你生成了匿名的嵌套函数和所有算符的调用。注意It的用法,Select It就表示选择所有字段。我们只需要Employee的名字,那么就可以这样写:
Dim result = Select e.FirstName, e.LastName From e In emp Where e.Age > 25这样,select语句就会把查询的结果转化成一个tuple(匿名类型的实例),它仅包含你所需要的字段。慢慢你就会发现,VB.NET查询包含的威力可以延伸到你所能接触到的一切数据。这种关系型的语法很快就会代替for Each的手工迭代工作。

我们知道VB9将在xml方面有卓越的改进,当xml literal、XML后期绑定与VB.NET查询包含的语法结合在一起后,将体现出非凡的简洁和高效,这是C# 3.0等同期语言无法比拟的,我们介绍到XML特性后再继续介绍。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...