LINQ の基本構文
LINQ は、2つの主要な書き方で記述できます:
メソッド構文(メソッドチェーン)
クエリ構文(SQLライクな構文)
1. メソッド構文
メソッド構文では、LINQのクエリをメソッド呼び出しとして表現します。これが最も一般的に使用されるスタイルです。
csharp
コードをコピーする
var result = collection
.Where(x => x.Age > 18)
.OrderBy(x => x.Name)
.Select(x => new { x.Name, x.Age });
この例では、次の操作を行っています:
Where:Age が 18 より大きい要素を選択
OrderBy:名前順に並べ替え
Select:名前と年齢を選んで新しい匿名型を作成
2. クエリ構文
クエリ構文は、SQLに似たスタイルで LINQ クエリを記述する方法です。
csharp
コードをコピーする
var result = from person in collection
where person.Age > 18
orderby person.Name
select new { person.Name, person.Age };
この構文も上記と同じ処理を行いますが、SQLライクな表現になっています。from, where, orderby, select などのキーワードを使って記述します。
LINQ を使うための基本的なクエリ例
配列やリストを使った例
csharp
コードをコピーする
// サンプルデータの作成
var people = new List<Person>
{
new Person { Name = "Alice", Age = 30 },
new Person { Name = "Bob", Age = 25 },
new Person { Name = "Charlie", Age = 35 }
};
// LINQ クエリ
var adults = from person in people
where person.Age >= 30
select person;
// 結果の表示
foreach (var person in adults)
{
Console.WriteLine(person.Name);
}
このコードは、年齢が 30 歳以上の人物をリストから選び出して、その名前を出力します。
SQL データベースを使った例(Entity Framework と LINQ)
Entity Framework や Dapper などの ORM を使用して、LINQ をデータベースクエリに使用することもできます。
csharp
コードをコピーする
var query = from article in _context.Articles
where article.Author == "John Doe"
orderby article.PublishDate descending
select article;
// 実行結果をリストに格納
var articlesByJohnDoe = query.ToList();
このコードは、データベースの Articles テーブルから著者が「John Doe」の記事を検索し、公開日が新しい順に並べ替えて取得します。
LINQ の主な操作メソッド
Where: 条件に一致する要素をフィルタリングする
Select: コレクションの各要素を変換する
OrderBy / OrderByDescending: 要素を昇順または降順で並べ替える
GroupBy: 要素をグループ化する
Join: 2つのコレクションを結合する
Distinct: 重複を排除する
Take: 最初のN個の要素を取得する
Skip: 最初のN個の要素をスキップする
First / FirstOrDefault: 最初の要素を取得する(条件を満たさない場合は null を返すことも可能)
Single / SingleOrDefault: 1つの要素を取得する(条件に一致する要素が複数ある場合はエラー)
Any: コレクションに要素が1つでもあるかどうかを確認する
All: コレクションのすべての要素が条件を満たすか確認する
LINQ の利点
簡潔なコード: 複雑なデータ操作を簡単な構文で記述できる。
可読性が高い: SQL ライクな構文を使うことで、データベースのクエリを理解している人が容易に理解できる。
型安全: 型エラーがコンパイル時に検出され、実行時のエラーが減る。
遅延実行: 必要なときにだけデータを取得するため、パフォーマンスを最適化できる。
LINQ の注意点
パフォーマンスの問題: 特に大規模なデータセットに対して多くの LINQ メソッドを組み合わせると、パフォーマンスが低下する場合がある。特に、遅延実行によってクエリが多重に実行されると、効率的ではない場合があります。
複雑すぎるクエリ: 複雑なクエリを LINQ で書くと、かえって理解しにくくなることもあります。特に長いチェーンやネストがある場合は注意が必要です。
まとめ
LINQ は、C# や他の .NET 言語におけるデータ操作を簡単にするための強力なツールです。コレクションやデータベース、XML など、さまざまなデータソースに対して統一的で宣言的な方法で操作を行うことができ、開発者が効率的にデータを操作できるようにします。