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