LINQ(クエリ構文)の要点だけ説明します。
クエリ式と言ったりクエリ構文と言ったしますが同じ事です。なんとなくですがクエリ式が多いような気もします。
クエリ構文は最低でも「from」、「in」、「select」の3つのキーワードが必要で、条件句である「where」を足した4大キーワードで構成されます。
そもそもLINQとは何か?
「Language-Integrated Query」の略で日本語だと「統合言語クエリ」とかそんな感じの意味です。
SQL言語のクエリとプログラミング言語のVB.NETを統合した技術という理解で良いと思います。
LINQを使用しない
Module Module1
    Sub Main()
        Dim numbers = New Integer() {1, 3, 4, 2, 5}
        For Each it In numbers
            Console.WriteLine(it)
        Next
    End Sub
End Module
1 3 4 2 5 続行するには何かキーを押してください . . .

にんてん
配列を出力しているだけです。
基本的なLINQを使用
Module Module1
    Sub Main()
        Dim numbers = New Integer() {1, 3, 4, 2, 5}
        'LINQ
        Dim selectNums = From n In numbers
                         Select n
        For Each it In selectNums
            Console.WriteLine(it)
        Next
    End Sub
End Module
1 3 4 2 5 続行するには何かキーを押してください . . .

にんてん
結果は変わっていませんがLINQに
処理をさせてます。
LINQを使用して結果を加工する
Module Module1
    Sub Main()
        Dim numbers = New Integer() {1, 3, 4, 2, 5}
        'LINQ
        Dim selectNums = From n In numbers
                         Select String.Format("{0}を2倍したら「{1}」です", n, n * 2)
        For Each it In selectNums
            Console.WriteLine(it)
        Next
    End Sub
End Module
1を2倍したら「2」です 3を2倍したら「6」です 4を2倍したら「8」です 2を2倍したら「4」です 5を2倍したら「10」です 続行するには何かキーを押してください . . .
LINQを使用して条件を指定する(フィルタリング)
Module Module1
    Sub Main()
        Dim numbers = Enumerable.Range(1, 9)
        'LINQ
        Dim query = From n In numbers
                    Where n Mod 2 = 0
                    Select n
        For Each it In query
            Console.WriteLine(it)
        Next
    End Sub
End Module
2 4 6 8 続行するには何かキーを押してください . . .
LINQを使用して複数条件を指定する(フィルタリング)
Module Module1
    Sub Main()
        Dim numbers = New Integer() {1, 3, 4, 2, 5}
        'LINQ
        Dim selectNums = From n In numbers
                         Where n >= 3
                         Where n Mod 2 = 0
                         Select n
        For Each it In selectNums
            Console.WriteLine(it)
        Next
    End Sub
End Module
4 続行するには何かキーを押してください . . .
LINQを使用してLIKE句で条件を指定する(フィルタリング)
Module Module1
    Sub Main()
        Dim array = New String() {"みかん", "りんご", "パイナップル"}
        'LINQ
        Dim query = From n In array
                    Where n Like "*ん*"
                    Select n
        For Each it In query
            Console.WriteLine(it)
        Next
    End Sub
End Module
/pre>
みかん りんご 続行するには何かキーを押してください . . .
LINQを使用して並べかえる(昇順)
Module Module1
    Sub Main()
        Dim numbers = New Integer() {1, 3, 4, 2, 5}
        'LINQ
        Dim selectNums = From n In numbers
                         Order By n
                         Select n
        For Each it In selectNums
            Console.WriteLine(it)
        Next
    End Sub
End Module
1 2 3 4 5 続行するには何かキーを押してください . . .
LINQを使用して並べかえる(降順)
Module Module1
    Sub Main()
        Dim numbers = New Integer() {1, 3, 4, 2, 5}
        'LINQ
        Dim selectNums = From n In numbers
                         Order By n Descending
                         Select n
        For Each it In selectNums
            Console.WriteLine(it)
        Next
    End Sub
End Module
5 4 3 2 1 続行するには何かキーを押してください . . .
LINQを使用して並べかえる(順番指定を複数)
Module Module1
    Sub Main()
        Dim array = New String() {"みかん", "りんご", "パイナップル", "白菜"}
        'LINQ
        Dim query = From n In array
                    Order By n.Length Descending, n
                    Select n.Length, n
        For Each it In query
            Console.WriteLine(it)
        Next
    End Sub
End Module
{ Length = 6, n = パイナップル }
{ Length = 3, n = みかん }
{ Length = 3, n = りんご }
{ Length = 2, n = 白菜 }
続行するには何かキーを押してください . . .

にんてん
順番を変えるコードをFor文で書くのは
大変なので積極的に使って行きましょう。
複数のデータソースを参照
Module Module1
    Sub Main()
        'LINQ
        Dim selectNums = From x In Enumerable.Range(1, 9)
                         From y In Enumerable.Range(1, 9)
                         Select x.ToString() + "×" + y.ToString() + "=" + (x * y).ToString()
        For Each it In selectNums
            Console.WriteLine(it)
        Next
    End Sub
End Module
1×1=1 1×2=2 1×3=3 1×4=4 ...........(中略) 9×7=63 9×8=72 9×9=81 続行するには何かキーを押してください . . .
指定の項目だけ取得
Module Module1
    Class Person
        Public ID As Int32
        Public 名前 As String
        Public 種類 As String
        Public Sub New(ID As Int32, 名前 As String, 種類 As String)
            Me.ID = ID
            Me.名前 = 名前
            Me.種類 = 種類
        End Sub
    End Class
    Sub Main()
        Dim persons() As Person = {
            New Person(1, "りんご", "果物"),
            New Person(2, "みかん", "果物"),
            New Person(3, "サツマイモ", "野菜")
        }
        'LINQ
        Dim selectPersons = From x In persons
                            Where x.種類 = "果物"
                            Where x.名前 Like "*ん*"
                            Select x.ID, x.名前
        For Each it In selectPersons
            Console.WriteLine(it)
        Next
    End Sub
End Module
{ ID = 1, 名前 = りんご }
{ ID = 2, 名前 = みかん }
続行するには何かキーを押してください . . .

にんてん
欲しいのは、IDと名前だけ
重複の排除
Module Module1
    Sub Main()
        Dim array = New Integer() {1, 2, 3, 2, 4, 3}
        'LINQ
        Dim query = From n In array
                    Select n Distinct
        For Each it In query
            Console.WriteLine(it)
        Next
    End Sub
End Module
1 2 3 4 続行するには何かキーを押してください . . .
joinで結合
Module Module1
    Sub Main()
        Dim array1 = New Integer() {1, 2, 3, 4, 5}
        Dim array2 = New Integer() {1, 2, 4}
        'LINQ
        Dim query = From x In array1
                    Join y In array2 On x Equals y
                    Select x, y
        For Each it In query
            Console.WriteLine(it)
        Next
    End Sub
End Module
{ x = 1, y = 1 }
{ x = 2, y = 2 }
{ x = 4, y = 4 }
続行するには何かキーを押してください . . .
両方に存在する値のみ取得できます。
  
  
  
  

コメント