リンクとは
序章
Linq (言語統合クエリ) は、C# およびその他の .NET 言語で使用できる言語統合クエリ テクノロジです。Linq を使用すると、SQL に似た言語を使用してデータをクエリできるため、コードがより簡潔で読みやすくなります。Linq は、コレクション、データベース、XML ドキュメント、Web サービスなどのさまざまなデータ ソースをクエリするために使用できる一般的なクエリ インターフェイスを提供します。
Linqの利点
Linq の利点は、データ アクセスとクエリ操作が簡素化されることです。Linq を使用すると、統一された構文を使用してさまざまなデータ ソースを処理できるため、コードがより簡潔になり、保守と拡張が容易になります。Linq は、厳密に型指定されたクエリ メソッドも提供します。これにより、コンパイル時にクエリ ステートメントの正しさをチェックして、実行時エラーを回避できます。
さらに、Linq は、フィルタリング、並べ替え、グループ化、集計など、コレクションや他のデータ ソースに対してさまざまな操作を実行できる便利な拡張メソッドもいくつか提供しています。通常、これらのメソッドは連鎖的に組み合わされるため、複雑なクエリ ステートメントを簡単に作成できます。
Linqの応用シナリオ
Linq は、さまざまなプログラミング シナリオで広く使用されています。一般的なアプリケーション シナリオをいくつか示します。
データベースアクセス
Linq は、SQL Server、Oracle、MySQL などのさまざまなデータベースと統合できます。Linq を使用すると、複雑な SQL ステートメントを作成せずに、統一された構文を使用してデータベース内のデータをクエリできます。Linq には、データベースを追加、削除、変更するための便利なメソッドもいくつか用意されています。
収集処理
Linq を使用すると、配列、リスト、辞書などを含むさまざまなコレクションを処理できます。Linq を使用すると、コレクションのフィルタリング、並べ替え、グループ化、集計などの操作を簡単に実行できます。通常、これらのメソッドは連鎖的に組み合わされるため、複雑なクエリ ステートメントを簡単に作成できます。
XML処理
Linq を使用して XML ドキュメントを処理できます。Linq を通じて、XPath に似た構文を使用して XML ドキュメント内のデータをクエリできます。Linq には、XML ドキュメントを追加、削除、変更するための便利なメソッドもいくつか用意されています。
データベースアクセス
以下は、Linq を使用してデータベースにアクセスする例です。ここでは、Person
というテーブルName
とAge
2 つのフィールドがあると仮定しています。
var db = new DataContext();
var query = from p in db.Person
where p.Age > 18
orderby p.Name
select p;
foreach (var person in query)
{
Console.WriteLine($"{person.Name}, {person.Age}");
}
上記のコードは、Linq を使用して、年齢が 18 歳以上の人々を名前順にクエリします。その中には、データベースに接続してデータテーブルを操作するために使用されるカスタムクラスが継承されていDataContext
ます。DbContext
収集処理
以下は、いくつかの整数を含む というリストがあると仮定して、Linq を使用してコレクションを操作する例ですnumbers
。
var numbers = new List<int> { 1, 2, 3, 4, 5 };
var query = from n in numbers
where n % 2 == 0
orderby n descending
select n;
foreach (var number in query)
{
Console.WriteLine(number);
}
上記のコードは、Linq を使用してリスト内の偶数を検索し、それらを逆順に出力します。このうち、from
キーワードはクエリ対象のデータソースを指定するために使用され、where
キーワードはデータをフィルタリングするために使用され、orderby
キーワードはデータを並べ替えるために使用され、select
キーワードは出力するデータを選択するために使用されます。
XML処理
ここでは、Linq を使用して XML ドキュメントを処理する例を示します。この例では、students.xml
一部の学生に関する情報が含まれる という XML ドキュメントがあると仮定しています。
<?xml version="1.0" encoding="utf-8"?>
<students>
<student name="Alice" age="18" gender="female" />
<student name="Bob" age="20" gender="male" />
<student name="Charlie" age="22" gender="male" />
</students>
Linq を使用して、18 歳以上の学生の名前と性別をクエリできます。
var doc = XDocument.Load("students.xml");
var query = from student in doc.Descendants("student")
where (int)student.Attribute("age") > 18
select new
{
Name = (string)student.Attribute("name"),
Gender = (string)student.Attribute("gender")
};
foreach (var student in query)
{
Console.WriteLine($"{student.Name}, {student.Gender}");
}
上記のコードは、Linq を使用して XML ドキュメント内の生徒情報をクエリし、出力するデータを条件によって選択します。その中には、XDocument
XML ドキュメントを表すために使用されるクラス、Descendants
ドキュメント内のすべての要素をクエリするために使用されるメソッド、およびAttribute
要素の属性値を取得するために使用されるメソッドがあります。
Linq は、データ アクセスとクエリ操作の簡素化に役立つ強力かつ柔軟なクエリ テクノロジです。データベース アクセス、コレクション処理、XML 処理などのシナリオにおいて、Linq はデータを処理するためのシンプルで統一された構文を提供できます。Linq テクノロジーを習得していない場合は、できるだけ早く学習して実際の開発に適用することをお勧めします。
ラムダ式
ラムダ式は C# 3.0 で導入された新しい言語機能で、コード内で匿名関数を定義できるようになります。ラムダ式の一般的な形式は次のとおりです。x => expression
ここで、x
はパラメータ リストを示し、expression
は関数本体を示します。ラムダ式は、Linq クエリ、イベント処理、委任などを含むさまざまなシナリオで使用できます。
ラムダ式とLinqの関係
ラムダ式と Linq は切り離せないものであり、一緒に使用して複雑なクエリ ステートメントを構築できます。Linq は統合されたクエリ インターフェイスを提供するため、ラムダ式を使用してクエリ条件と選択されたデータを定義できます。以下は、いくつかの整数を含む というリストがあると仮定した、ラムダ式を使用した Linq クエリの例ですnumbers
。
var numbers = new List<int> { 1, 2, 3, 4, 5 };
var query = numbers.Where(n => n % 2 == 0).OrderByDescending(n => n);
foreach (var number in query)
{
Console.WriteLine(number);
}
上記のコードは、ラムダ式を使用してクエリ条件と並べ替えメソッドを定義し、Where
そのメソッドを使用してデータをフィルタリングし、OrderByDescending
そのメソッドを使用してデータを逆順に並べ替えます。
ラムダ式の具体的な使用例
people
ここでは、ラムダ式を使用した具体的な例を示します。ここでは、何人かの人々に関する情報を含む という名前のリストがあると仮定しています。
var people = new List<Person>
{
new Person { Name = "Alice", Age = 18, Gender = Gender.Female },
new Person { Name = "Bob", Age = 20, Gender = Gender.Male },
new Person { Name = "Charlie", Age = 22, Gender = Gender.Male }
};
var query = people.Where(p => p.Age > 18 && p.Gender == Gender.Male).OrderBy(p => p.Name);
foreach (var person in query)
{
Console.WriteLine($"{person.Name}, {person.Age}, {person.Gender}");
}
上記のコードは、ラムダ式を使用して 18 歳以上で性別が男性である人々をフィルターし、名前で並べ替えます。このうち、Where
ラムダ式を使用してクエリ条件を定義するメソッドと、OrderBy
ラムダ式を使用してソート方法を定義するメソッドがあります。これらのラムダ式により、コードがより簡潔になり、読みやすくなります。
Linq は、データ アクセスとクエリ操作の簡素化に役立つ強力かつ柔軟なクエリ テクノロジです。データベース アクセス、コレクション処理、XML 処理などのシナリオにおいて、Linq はデータを処理するためのシンプルで統一された構文を提供できます。Linq 式や Lambda 式の技術を習得していない場合は、できるだけ早く学習して実際の開発に適用することをお勧めします。