C#でデータ処理を行う際、DataTableは非常に便利なツールです。さらにLINQ(Language Integrated Query)を組み合わせることで、より柔軟で効率的なデータ操作が可能になります。この記事では、C#のDataTableでLINQを使用する方法を、初心者の方にも分かりやすく解説します。
目次
DataTableとLINQの基本
まずは、サンプルのDataTableを作成し、LINQの基本的な使い方を見てみましょう。
using System;
using System.Data;
using System.Linq;
class Program
{
static void Main()
{
// サンプルDataTableの作成
DataTable employees = new DataTable("社員");
employees.Columns.Add("ID", typeof(int));
employees.Columns.Add("名前", typeof(string));
employees.Columns.Add("部署", typeof(string));
employees.Columns.Add("給与", typeof(decimal));
employees.Rows.Add(1, "山田太郎", "営業", 300000);
employees.Rows.Add(2, "佐藤花子", "人事", 280000);
employees.Rows.Add(3, "鈴木一郎", "開発", 320000);
employees.Rows.Add(4, "田中美咲", "営業", 290000);
// LINQを使用してDataTableを操作
var highPaidEmployees = employees.AsEnumerable()
.Where(row => row.Field<decimal>("給与") > 290000)
.Select(row => new
{
Name = row.Field<string>("名前"),
Salary = row.Field<decimal>("給与")
});
Console.WriteLine("給与が290,000円を超える社員:");
foreach (var emp in highPaidEmployees)
{
Console.WriteLine($"{emp.Name} - 給与: {emp.Salary:C}");
}
}
}
この例では、AsEnumerable()
メソッドを使用してDataTableをLINQで操作可能な形に変換し、Where
で条件に合う行を抽出し、Select
で必要な情報だけを取り出しています。
複雑なクエリの作成
LINQを使用すると、より複雑なデータ操作も簡単に行えます。以下は、部署ごとの平均給与を計算する例です。
var departmentAverages = employees.AsEnumerable()
.GroupBy(row => row.Field<string>("部署"))
.Select(g => new
{
Department = g.Key,
AverageSalary = g.Average(row => row.Field<decimal>("給与"))
});
Console.WriteLine("\n部署ごとの平均給与:");
foreach (var dept in departmentAverages)
{
Console.WriteLine($"{dept.Department} - 平均給与: {dept.AverageSalary:C}");
}
このクエリでは、GroupBy
を使用して部署ごとにグループ化し、各グループの平均給与を計算しています。
DataTableの更新
LINQを使用してDataTableの内容を更新することも可能です。以下は、特定の条件に合う行の給与を増加させる例です。
employees.AsEnumerable()
.Where(row => row.Field<string>("部署") == "営業")
.ToList()
.ForEach(row => row.SetField("給与", row.Field<decimal>("給与") * 1.1m));
Console.WriteLine("\n営業部員の給与を10%増加させた後:");
var updatedSalaries = employees.AsEnumerable()
.Where(row => row.Field<string>("部署") == "営業")
.Select(row => new { Name = row.Field<string>("名前"), Salary = row.Field<decimal>("給与") });
foreach (var emp in updatedSalaries)
{
Console.WriteLine($"{emp.Name} - 新給与: {emp.Salary:C}");
}
この例では、営業部の社員の給与を10%増加させています。
パフォーマンスに関する注意点
LINQは非常に便利ですが、大量のデータを扱う場合はパフォーマンスに注意が必要です。
- 可能な限り、必要なデータのみを取得するようにしましょう。
- 複雑なクエリは、複数の簡単なクエリに分割することを検討しましょう。
- 頻繁に使用するクエリ結果はキャッシュすることを考えましょう。
まとめ
C#のDataTableでLINQを使用することで、複雑なデータ操作を簡潔かつ読みやすいコードで実現できます。基本的なフィルタリングから、グループ化、集計、更新まで、LINQは幅広いデータ操作に対応しています。
初心者の方は、まずは簡単なクエリから始めて、徐々に複雑な操作に挑戦してみてください。LINQの使い方に習熟することで、DataTableを使ったデータ処理の効率が大幅に向上し、より洗練されたC#プログラムを書けるようになるでしょう。
コメント