VS2008里面有个神奇的东西,称之为LINQ,可以透过相同的语法方式来处理各式各样的数据(SQL,XML,Object,...),小喵此次初体验感受一下这个东西,真的很好用,初体验来做个简单的测试,请看小喵娓娓道来
VS2008里面有个神奇的东西,称之为LINQ,可以透过相同的语法方式来处理各式各样的数据(SQL,XML,Object,...),小喵此次初体验感受一下这个东西,真的很好用,初体验来做个简单的测试,请看小喵娓娓道来
先来看一张LINQ的架构图(数据来源:曹祖圣老师在TechEd2007的简报)
要看完整的请点选上面的图档,从这张图来看LINQ可以用来取得相当多的数据,而只要数据能够用程Object的形式,就能够透过LINQ来存取
接着就开始这次的初体验
先说明一下小喵要做的:小喵弄个座位表格,分别有--SeatId(座位代号),SeatName(座位名称)
然后产生测试数据200个座位数据,SeatName(座位名称)用随机数产生a-z的字母加上SeatId当作是座位名称,最后用个界面来测试使用LINQ筛选数据(找字头相同的)
这样的题目以前小喵在ASP都是用二维数组来做,在.NET里面则是可以用对象的方式取代二为数组
先建立座位的对象如下:
_
Public Class Seat
Private m_SeatNum As Integer
Private m_SeatName As String
Public Property SeatNum() Property SeatNum() As Integer
Get
Return m_SeatNum
End Get
Set(ByVal value As Integer)
m_SeatNum = value
End Set
End Property
Public Property SeatName() Property SeatName() As String
Get
Return m_SeatName
End Get
Set(ByVal value As String)
m_SeatName = value
End Set
End Property
End Class
接着设计划面如下
?
产生的数据放在GridView1,筛选后的数据放在GridView2
接着撰写产生数据的部分
Protected Sub btnGen_Click() Sub btnGen_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnGen.Click
Dim y As Integer
Dim s As Seat
mySeats.Clear()
For y = 1 To 200
s = New Seat
s.SeatNum = y
s.SeatName = GetRndChr() + "-" + y.ToString
mySeats.Add(s)
Next
ViewState("mySeats") = mySeats
Me.GridView1.DataSource = mySeats
Me.GridView1.DataBind()
End Sub
Protected Function GetRndChr() Function GetRndChr() As String
Dim i As Integer = 26
Randomize()
Dim tmpI As Integer = i * Rnd() + 1 + 96
Return Chr(tmpI)
End Function
然后就是我们的重点来了,在这些数据中,想要找SeatName(座位名称)a开头的数据,以前小喵可能会用个循环逐笔查,但是有了LINQ,就可以写成以下这样
Protected Sub btnSift_Click() Sub btnSift_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSift.Click
Dim Qry As Object = From ss In mySeats _
Where ss.SeatName Like Me.TextBox1.Text + "*" _
Select ss
Me.GridView2.DataSource = Qry
Me.GridView2.DataBind()
End Sub
各位可以发现,用这样超短的程序就能够做到筛选。真是太好了
熟悉T-SQL的朋友,您接着就可以想像以前T-SQL里面的Grou By,Distinct,Order By等等都可以再对象里面玩,甚至可以透过JOIN,把不同的对象数据作关联之后来取数据。真是神奇啊。
这次的初体验只是约略的感受一下LINQ的威力,此次的例子只是两个字段,一个条件的筛选,各位可以试想一下,如果应用在很多字段,并且结合其他的数据(LINQ可以使用JOIN)并且使用多重条件的筛选,那么可以节省多少的程序就能够达到相同的目的。未来有其他的测试再与大家分享。
^_^
以下是签名:
- 欢迎转贴本站的文章,不过请在贴文主旨上加上【转贴】,并在文章中附上本篇的超链接与站名【topcat姗舞之间的极度凝聚】,感恩大家的配合。
- 小喵大部分的文章会以小喵熟悉的语言VB.NET撰写,如果您需要C#的Code,也许您可以试着用线上的工具进行转换,这里提供几个参考
- http://converter.telerik.com/
- http://www.carlosag.net/tools/codetranslator/
- http://www.developerfusion.com/tools/convert/vb-to-csharp/
Visual Studio and Development Technologies (2005~Now) |
topcat Blog:http://www.dotblogs.com.tw/topcat |
原文:大专栏 LINQ to Object初体验(使用对象取代二维数组作数据筛选)
原文地址:https://www.cnblogs.com/chinatrump/p/11490954.html