LINQ to Object - VB.NET
由於最近有個報告跟LINQ有關,所以試寫了一些LINQ,仿間的書大多是以C#為範例,但我想以VB.NET來寫,所以做個記錄一下。
參考的內容為MSDN與LINQ最佳實務講座這本書,呂高旭大大寫的實在是太好了,很詳細且很容易就可以上手,推薦想學LINQ的可以買一本來看,唯一的缺點只有…我想看VB.NET的啦 =.=。
首先來個Select範例,藉由Substring取出每個字串前三個字。
' LINQ to Objects - Select
'************************************************************************************
Dim weekDayList As New List(Of String)
weekDayList.Add("Monday")
weekDayList.Add("Tuesday")
weekDayList.Add("Wednesday")
weekDayList.Add("Thursday")
weekDayList.Add("Friday")
weekDayList.Add("Saturday")
weekDayList.Add("Sunday")
' LINQ 運算式
Dim enumWeek1 = From weekDay As String In weekDayList Select weekDay.Substring(0, 3)
For Each Str As String In enumWeek1
MsgBox("LINQ 運算式:" & Str)
Next
' Lambda 運算式
Dim enumWeek2 = weekDayList.Select(Function(str) str.Substring(0, 3))
For Each Str As String In enumWeek2
MsgBox("Lambda 運算式:" & Str)
Next
接下來是Where的範例:
Structure ReportFormat
Dim ReportFmtType As Integer
Dim ReportFileName As String
End Structure
''' <summary>LINQ to Objects - Where</summary>
''' <remarks></remarks>
Private Sub btnDemo1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDemo1.Click
' LINQ to Objects - Where
'************************************************************************************
'定義陣列
Dim matrix(2) As ReportFormat
matrix(0).ReportFmtType = 0
matrix(0).ReportFileName = "Chroma"
matrix(1).ReportFmtType = 0
matrix(1).ReportFileName = "Untitled"
matrix(2).ReportFmtType = 1
matrix(2).ReportFileName = "DEMO"
'LINQ Where過濾
Dim result = From c In matrix Where c.ReportFmtType = 1
'顯示名稱
For Each item In result
MsgBox(item.ReportFileName)
Next
End Sub
排序的範例:
' LINQ to Objects - OrderBy
'************************************************************************************
Dim weekDayList() As String = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}
' 排序
Dim orderWeek1 = From weekDay As String In weekDayList Order By weekDay
' 針對某個字排序
Dim orderWeek2 = From weekDay As String In weekDayList Order By weekDay.Substring(2, 1)
還有一些好用的函式,像是取最大值、最小值、平均、總合即與陣列之間互轉等等。
Dim numList As New List(Of Integer)
For i As Integer = 1 To 10
numList.Add(i)
Next
MsgBox(numList.Average())
MsgBox(numList.Max())
MsgBox(numList.Min())
MsgBox(numList.Sum())
numList.ToArray()
還有可以過濾掉集合中重複的值,出來的結果分別是abc、a、bc、abce。
Dim strArray1() As String = {"a", "b", "c", "c"}
Dim strArray2() As String = {"b", "c", "e"}
Dim enumDistinct = strArray1.Distinct()
Dim enumExcept = strArray1.Except(strArray2)
Dim enumIntersect = strArray1.Intersect(strArray2)
Dim enumUnion = strArray1.Union(strArray2)
可以寫的實在太多了,下篇再繼續分享LINQ對其他資料來源。