LINQ to Object - VB.NET

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對其他資料來源。