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 }
続行するには何かキーを押してください . . .
両方に存在する値のみ取得できます。
コメント