LINQ サンプル

[もどる]


このサンプルでは, LINQ To SQL を使ってテーブルにアクセスしている。テーブルとストアドプロシージャの構成は下の画像のようになっている。


サンプル(1) Join

    ''' <summary>
    ''' MESSAGES テーブルの MEMBER を MEMBERS の NAMEKNJ で置き換えて表示する。
    ''' </summary>
    ''' <remarks>INNER JOIN</remarks>
    Sub ShowMessages()
        Dim rs As IQueryable = From x In db.MESSAGES
                               Join y In db.MEMBERS On x.MEMBER Equals y.ID
                               Select New With {
                     .ID = x.ID,
                     .メンバー = y.NAMEKNJ,
                     .タイトル = x.TITLE,
                     .メッセージ = x.MESSAGE,
                     .日付 = x.REGDT
                 }

        For Each x In rs
            Console.WriteLine(String.Join(",", x))
        Next
    End Sub
 

サンプル(2) サブクエリー

    ''' <summary>
    ''' MESSAGES テーブルの MEMBER を MEMBERS の NAMEKNJ で置き換えて表示する。
    ''' (MEMBERS に登録されてない場合はNULLで表示)
    ''' </summary>
    ''' <remarks>LEFT OUTER JOIN</remarks>
    Sub ShowMessages2()
        Dim rs As IQueryable = From x In db.MESSAGES
                               From y In db.MEMBERS.Where(Function(item) x.MEMBER = item.ID)
.DefaultIfEmpty()
                               Select New With {.ID = x.ID, .メンバー = y.NAMEKNJ, 
.タイトル = x.TITLE, .メッセージ = x.MESSAGE, .日付 = x.REGDT}

        For Each x In rs
            Console.WriteLine(String.Join(",", x))
        Next
    End Sub
 

サンプル(3) Group By

    ''' <summary>
    ''' MESSAGES テーブルのメンバー別発言回数を得る。
    ''' </summary>
    Sub GetMessageCount()
        Dim rs As IQueryable = From x In db.MESSAGES Group x By x.MEMBER Into Count(x.MEMBER)
        Dim nameKnj As String

        For Each x In rs
            Try
                nameKnj = db.GetNameKnj(x.MEMBER).First().NameKnj
                Console.WriteLine(nameKnj & ", " & x.Count.ToString())
            Catch ex As Exception

            End Try
        Next
    End Sub
 

サンプル(4) .Where(), .Select()

    ''' <summary>
    ''' LINQ メソッドを使ったクエリーの例
    ''' </summary>
    ''' <param name="mmb"></param>
    Sub QueryMessage(ByVal mmb As Integer)
        Dim rs As IQueryable = db.MESSAGES.Where(Function(x) mmb = x.MEMBER)
.Select(Function(x) New With {.ID = x.ID, .メンバー = x.MEMBER, .タイトル = x.TITLE})
        For Each x In rs
            Console.WriteLine(String.Join(",", x))
        Next
    End Sub
 

サンプル(5) New With {}

    ''' <summary>
    ''' Distict を使う例
    ''' </summary>
    Sub DistinctTest()
        Dim rs As IQueryable = db.MESSAGES.Select(Function(x) 
New With {.日付 = x.REGDT}).Distinct()
        For Each x In rs
            Console.WriteLine(x.日付)
        Next
    End Sub
 

サンプル(6) .OrderByDescending()

    ''' <summary>
    ''' OrderBy を使う例
    ''' </summary>
    Sub OrderByTest()
        Dim rs As IEnumerable = db.MEMBERS.OrderByDescending(Function(x) x.BIRTH)
.Select(Function(i) New With {.ID = i.ID, .名前 = i.NAMEKNJ, .誕生日 = i.BIRTH})
        For Each x In rs
            Console.WriteLine(x.ID.ToString() & ", " & x.名前 & ", " & x.誕生日)
        Next
    End Sub
 

サンプル(7) Max(), Min()

    ''' <summary>
    ''' 最少と最大
    ''' </summary>
    Sub GetMaxMin()
        Dim m As IQueryable(Of Integer) = From x In db.MEMBERS Select x.ID
        Console.WriteLine(m.Min())
        Console.WriteLine(m.Max())
    End Sub