前回の記事から日があいてしまいましたが、今回はLINQを取り上げます。
型DataTableに対して、言ってみれば、SQLのように指定したデータを取得するものです。
FruitsDataTableのイメージ
No | Name | Color |
---|---|---|
1 | Apple | Red |
2 | Banana | Yellow |
3 | Grape | Purple |
4 | Orange | Orange |
'配列を用意
Dim array1() As String = {"Apple","Banana","Grape","Orange"}
Dim array2() As String = {"Red","Yellow","Purple","Orange"}
Dim dt As New DataTable
dt.Columns.Add("No", GetType(Integer))
dt.Columns.Add("Name", GetType(String))
dt.Columns.Add("Color", GetType(String))
For i = 0 To 3
Dim dr As DataRow = dt.Rows.Add()
dr("No") = i + 1
dr("Name") = array1(i)
dr("Color") = array2(i)
Next i
以上が、サンプルデータテーブル(dt)の作成です。
では、本題のLINQを記述します。
例えば、NameのAppleのデータのみを取り出す例です。
Dim appleRows = From row In dt.AsEnumerable() Where row.Field(Of String)("Name") = "Apple" Select row
LINQを記述することで、データを集合演算のように抽出することができます。
複数のデータを扱うことができるため、重宝しています。
LINQのいくつかのバリエーションを記載しておきます。
ChatGPTで生成しました。
1.単純なWhere句でのフィルタリング
'特定の条件に合致する行を取り出す場合
Dim table As DataTable = GetYourDataTable()
Dim result = From row In table.AsEnumerable()
Where row.Field(Of String)("ColumnName") = "YourValue"
Select row
For Each r As DataRow In result
' 行に対する処理
Next
2.Select句で特定の列だけを取り出す
`特定の列のデータだけを取得したい場合
Dim table As DataTable = GetYourDataTable()
Dim result = From row In table.AsEnumerable()
Select row.Field(Of String)("ColumnName")
For Each value In result
Console.WriteLine(value)
Next
3.複数の列を匿名型で取得
4.OrderByでのソート
5.Distinctで重複排除
等々
データのフィルタリング、選択、ソート、集計に使用できます。
「一部のコードは、OpenAIのChatGPTを使用して生成しました。」
まとめ
LINQを利用することで、データをSQLのように取得することが可能です。