MENU

C# DataTable でのLINQの使い方

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#プログラムを書けるようになるでしょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次