`
lovnet
  • 浏览: 6905631 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

LINQ其实很简单

阅读更多

会写这一篇是有原因的,不只一次有人问我,要不要学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值。

接着,我编写底下程序代码:

&apos;定义数组

Dim matrix(5) As BMI

&apos;填入测试资料

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

&apos;计算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程序:

&apos;查询BMI值大于25的人

Dim result = From c In matrix Where c.BmiValue > 25

结束,就是这样,而 result 就是找出的结果对象,你可以通过 result 来取得每一个符合条件的资料。简单的说,上面这段程序代码的意思是,从matrix对象集合当中,找出一些数据,这些数据的BmiValue属性大于25。其中的 c 只是编写程序代码方便,c代表该对象元素,你也可以用别的字眼..

而找出的数据result也是一个集合,你可以通过底下的程序代码来列出每一个BMI值符合条件者的名字:

&apos;显示名称

For Each item In result

   MsgBox(item.name)

Next

很简单不是吗? result 当中的每一个 item ,其型别就是 BMI,因为Result对象是LINQ语法跑出的结果,所以只有包含符合 BmiValue > 25 这个条件的人……

上面这段程序代码,还可以这样写……

&apos;显示名称

For Each item In (From c In result Select c.name)

   MsgBox(item)

Next

效果完全一样唷,但是,(From c In result Select c.name) 会产生一个对象,该对象只有符合条件者的名称(相当于一维数组),而item的型别当然就是string

通过上面这样的指令,查找动作变得相当简单,还不仅如此,关键在于底下这样的语法:

&apos;查询BMI值大于25的人

Dim result = From c In matrix Where c.BmiValue > 25

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

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

分享到:
评论

相关推荐

    使用Dynamic LINQ实现Ext Grid的远程排序

    要实现Ext Grid的远程排序其实很简单,只要修改查询语句的排序关键字就可以了,但是,如果你的项目是使用Linq进行开发的,会发现动态修改排序关键字并不是那么容易的事,解决办法就是使用LINQ Dynamic Query Library...

    Linq系统资源管理器源码2012726

    ORM框架,就是转化成SQL执行等等,其实这是对LINQ的 误解,我想用这个例子程序说明,LINQ没有那么神秘, 它就是C# 3时代的一种简单语法,它可以融入到程序的 每个角落。大家可以放心大胆地使用LINQ简化开发,书 写...

    Dynamic LINQ to NHibernate

    通过以上内容,我们了解了 Dynamic LINQ to NHibernate 的基本原理、核心方法以及其实现细节,同时也讨论了一些性能优化策略和最佳实践。这些知识点对于希望在实际项目中应用 Dynamic LINQ to NHibernate 的开发人员...

    LINQ_to_SQL语法及实例大全

    ### LINQ_to_SQL语法及实例大全 #### 一、LINQ_to_SQL简介 **LINQ to SQL** 是 Microsoft .NET Framework 提供的一种用于在 C# 或 VB.NET 中编写数据库查询的强大工具。它允许开发人员使用一种类似于 SQL 的语法来...

    Moon.Orm.NET.zip

    多数据源及多数数据库变动支持不是很方便 Nhibernate 国外第三方支持 历史悠久( java hibernate),后续版本支持LINQ 使用麻烦、配置一堆、学习成本大       Moon....

    Illustrated C# 2008 (with Source Code)

    4: 本书把C# 3.0中的新特性也很好地融入内容,非常好,比如lamda表达式和Linq,对于ASP.net开发支持非常有力,但是基本上ASP.net的相关资料中,都不会详细介绍它们的原理,使你感觉很难理解,而这本书则从最基础的...

    C#控制台带参数程序源码编写实例讲解

    像ipconfig /all 这样的CMD命令想必大家都知道,但是很多童鞋可能不知道怎么写这样的控制台带参数的程序,其实很简单,我们先看建立项目的默认代码: 代码如下: using System; using System.Collections.Generic; ...

    数据库依赖缓存

    简单说了下数据库的数据依赖缓存,这个其实我也没搞懂.只是做了个简单的介绍.还有一个简单的Demo.数据库自建吧.里面有用到linq的DBML.  --本人只是入门级菜鸟,资源免费.大侠们别嘲笑,别打击我好学的积极性.

    ASP.NET中实现把Json数据转换为ADO.NET DataSet对象

    Json数据转换为ADO.NET DataSet其实方法有很多,Newtonsoft.Json也提供了DataSet的Converter用以转换Json数据。但是有些情况下DataSet Converter并不管用,而且也不一定能够满足项目需要。这里介绍另一种简单有效的...

    浅谈.Net并行计算之数据并行

    这样我们可以将我们程序分摊到多个计算机CPU中去计算,在过去并行化需要线程的低级操作,难度很大,在.net4.0中的增强了对并行化的支持,使得这一切变得非常简单 。本次我从以下几个方面大家讲以下.NET 并行 1. ...

    Newtonsoft.Json.dll

    4. **LINQ to JSON**:提供了一种使用LINQ查询JSON文档的方法,使得操作JSON数据如同操作.NET集合一样简单。 5. **自定义转换器**:允许开发者自定义转换器,以便处理特定类型的序列化和反序列化需求。 6. **性能...

    Net framework3.5安装包

    .NET Framework 3.0虽然在版本号上看似是从2.0升级而来,但其实它主要是在2.0的基础上添加了四个新的技术子集,即WPF、WCF、WF和CardSpace。WPF是一种全新的用户界面框架,使用XAML语言来描述UI,提供了丰富的图形和...

    .NET笔记之:Delegate内部原理的分析

    相信大家对委托并不陌生,委托其实就是一种定义方法签名的类型;有关于委托的详细介绍,大家可以参考MSDN中作出的介绍,链接为:http://msdn.microsoft.com/zh-cn/library/vstudio/ms173171.aspx。这里我就不做具体...

    C#语言程序设计基础知识

    C#语言程序设计基础知识是IT领域中不可或缺的一部分,它为开发者提供了一种高效且安全...通过不断学习和实践,开发者可以深入理解C#的高级特性,如委托、事件、泛型、LINQ等,从而提升编程能力,实现更复杂的软件系统。

    CSharp初级教程

    - **LINQ**:即 Language Integrated Query 的缩写,提供了强大的查询表达式功能,可以方便地对数据集合进行筛选、排序等操作。 - **异步编程**:使用 `async` 和 `await` 关键字来编写异步代码,提高程序的响应性和...

    Nhibernate(最新版),DoNet版本的ORM开源框架

    在Nhibernate中,一个类可以被标记为实体,其实例将成为数据库中记录的映射。 2. **映射(Mapping)**:Nhibernate通过XML或注解形式的映射文件定义实体类与数据库表之间的对应关系。映射文件包含了字段映射、主键...

    C#委托学习

    委托在C#中其实是一个类,它实现了对方法的引用。委托类提供了Invoke、BeginInvoke和EndInvoke三个关键方法。Invoke用于同步执行,而BeginInvoke和EndInvoke则用于异步操作。委托的声明通常使用`delegate`关键字,与...

    QQ机器人c#源代码

    QQ协议是腾讯公司为其实时通讯软件QQ所设计的一套通信协议,包括但不限于文本消息、文件传输、好友管理等功能。为了实现QQ机器人的功能,我们需要了解这些协议的具体细节。 ##### 2.1 协议解析 - **HTTP接口**: QQ...

    C#编程高并发的几种处理方法详解

    并发(英文Concurrency),其实是一个很泛的概念,字面意思就是“同时做多件事”,不过方式有所不同。在.NET的世界里面,处理高并发大致有以下几种方法: 1. 异步编程 异步编程就是使用future模式(又称promise)...

    C#学习笔记_20100614

    在这个例子中,我们首先创建了一个包含几个人的`List&lt;Person&gt;`,然后使用LINQ查询语法对这些人按年龄排序。 #### StringWriter实现的一个功能 `StringWriter`是`System.IO`命名空间下的一个类,用于将字符串视为流...

Global site tag (gtag.js) - Google Analytics