Linq-quick-guide
LINQ-概要
世界中の開発者は、定義されたパスがなく、SQL、Webサービス、XQueryなどの複数のテクノロジーを習得する必要があるため、データのクエリで常に問題に直面しています。
Visual Studio 2008で導入され、Anders Hejlsbergによって設計されたLINQ(Language Integrated Query)は、SQL、XMLなどのクエリ言語の知識がなくてもクエリを記述できます。 LINQクエリは、さまざまなデータタイプに対して記述できます。
LINQクエリの例
C#
VB
上記のC#またはVBのコードをコンパイルして実行すると、次の結果が生成されます-
LINQの構文
LINQには2つの構文があります。 これらは次のものです。
ラムダ(メソッド)構文
クエリ(内包表記)構文
LINQの種類
LINQの種類について簡単に説明します。
- オブジェクトへのLINQ
- LINQ to XML(XLINQ)
- LINQ to DataSet
- LINQ to SQL(DLINQ)
- エンティティへのLINQ
上記とは別に、MicrosoftのパラレルLINQであるPLINQというLINQタイプもあります。
.NETのLINQアーキテクチャ
LINQには、最上層が言語拡張で構成され、最下層がIEnumerable <T>またはIQueryable <T>ジェネリックインターフェイスを実装するオブジェクトであるデータソースで構成される3層アーキテクチャがあります。 アーキテクチャを以下に示します。
クエリ式
クエリ式はLINQクエリに過ぎず、Select、Where、OrderByなどのクエリ演算子を使用したSQLの形式に似た形式で表現されます。 クエリ式は通常、キーワード「From」で始まります。
標準のLINQクエリ演算子にアクセスするには、名前空間System.Queryをデフォルトでインポートする必要があります。 これらの式は、C#3.0であった宣言クエリ構文内に記述されています。
以下は、データソースの作成、クエリ式の定義、クエリの実行で構成される完全なクエリ操作を示す例です。
C#
上記のコードをコンパイルして実行すると、次の結果が生成されます-
拡張メソッド
NET 3.5で導入された拡張メソッドは、静的クラスでのみ宣言され、オブジェクトにカスタムメソッドを含めることで、正確なクエリ操作を実行して、そのクラスの実際のメンバーにならずにクラスを拡張できます。 これらも過負荷になる可能性があります。.
簡単に言うと、拡張メソッドを使用して、クエリ式を従来のメソッド呼び出し(オブジェクト指向)に変換します。
LINQとストアドプロシージャの違い
LINQプロシージャとストアドプロシージャには、さまざまな違いがあります。 これらの違いを以下に示します。
- ストアドプロシージャは、予想される実行計画に従うため、LINQクエリよりもはるかに高速です。
- 前者はVisual StudioのIntellisenseをサポートし、コンパイル時の完全な型チェックを行うため、ストアドプロシージャに比べて、LINQクエリの実行中にランタイムエラーを回避するのは簡単です。
- LINQでは、ストアドプロシージャの場合ではない.NETデバッガーを使用してデバッグできます。
- LINQは、ストアドプロシージャとは異なり、複数のデータベースをサポートします。ストアドプロシージャでは、さまざまな種類のデータベースのコードを書き直すことが不可欠です。 *LINQベースのソリューションの展開は、一連のストアドプロシージャの展開に比べて簡単でシンプルです。
LINQの必要性
LINQより前は、C#、SQL、および両方を結合して完全なアプリケーションを形成するさまざまなAPIを学ぶことが不可欠でした。 なぜなら、これらのデータソースとプログラミング言語はインピーダンスの不一致に直面しているためです。短いコーディングの必要性が感じられます。
以下は、LINQの登場前にデータを照会する際に開発者が使用した多様な手法の例です。
興味深いことに、機能コード行のうち、クエリは最後の2行のみで定義されます。 LINQを使用すると、同じデータクエリを、非常に短い時間で以下に説明するように、読み取り可能な色分けされた形式で記述できます。
LINQの利点
LINQには多くの利点がありますが、その中で最も重要なのは、開発者が宣言的に表現できる強力な表現力です。 LINQのその他の利点のいくつかを以下に示します。
- LINQは、設計時に間違いを見つけるのに役立つ構文の強調表示を提供します。
- LINQはIntelliSenseを提供します。これにより、より正確なクエリを簡単に作成できます。
- LINQではコードの記述が非常に高速であるため、開発時間も大幅に短縮されます。
- LINQは、C#言語に統合されているため、簡単にデバッグできます。
- LINQの階層機能により、2つのテーブル間の関係を簡単に表示できます。これにより、複数のテーブルを結合するクエリを短時間で作成できます。
- LINQでは、多くの多様なデータソースを照会しながら単一のLINQ構文を使用できます。これは主に、その統一的な基盤のためです。
- LINQは拡張可能であるため、LINQの知識を使用して新しいデータソースの種類を照会することができます。
- LINQは、複数のデータソースを1つのクエリに結合し、複雑な問題をデバッグしやすい短いクエリのセットに分割する機能を提供します。
- LINQは、SQLデータをXMLデータに変換するように、あるデータ型を別のデータ型に変換するための簡単な変換を提供します。
LINQ-環境設定
LINQプログラムを開始する前に、まずLINQ環境をセットアップすることの微妙な違いを理解することが最善です。 LINQには、さまざまな種類のアプリケーションを使用するための革新的なプラットフォームである.NETフレームワークが必要です。 LINQクエリは、C#またはVisual Basicで簡単に記述できます。
Microsoftは、これらの両方の言語用のツールを提供しています。 Visual StudioによるC#およびVisual Basic。 サンプルはすべてVisual Studio 2010でコンパイルおよび作成されています。 ただし、Visual Basic 2013エディションも使用できます。 これは最新バージョンであり、Visual Studio 2012と多くの類似点があります。
Windows 7にVisual Studio 2010をインストールする
Visual Studioは、DVDなどのインストールメディアからインストールできます。 システムにVisual Basic 2010を正常にインストールするには、管理者の資格情報が必要です。 インストール前にシステムからすべてのリムーバブルUSBを切断することが重要です。そうしないと、インストールが失敗する可能性があります。 インストールに必要なハードウェア要件には、次のものがあります。
ハードウェア要件
- 1.6 GHz以上
- 1 GBのRAM
- 3 GB(利用可能なハードディスク容量)
- 5400 RPMハードディスクドライブ
- DirectX 9互換のビデオカード
- DVD-ROMドライブ
インストール手順
- ステップ1 *-Visual Studio 2010パッケージでDVDを挿入した後、画面のポップアップボックスに表示される[メディアからプログラムをインストールまたは実行]をクリックします。
- ステップ2 *-Visual Studioのセットアップが画面に表示されます。 [Microsoft Visual Studio 2010のインストール]を選択します。
- ステップ3 *-クリックするとすぐにプロセスが開始され、セットアップウィンドウが画面に表示されます。 しばらく時間がかかるインストールコンポーネントの読み込みが完了したら、[次へ]ボタンをクリックして次の手順に進みます。
- ステップ4 *-これはインストールの最後のステップです。「ライセンス条項を読んで同意します」を選択し、「次へ」ボタンをクリックするだけのスタートページが表示されます。
ステップ5 *-画面に表示されるオプションページからインストールする機能を選択します。 *Full または Custom オプションを選択できます。 ディスク容量の要件に示されている必要なディスク容量よりも少ない場合は、カスタムに進みます。
- ステップ6 *-カスタムオプションを選択すると、次のウィンドウが表示されます。 インストールする機能を選択し、[更新]をクリックするか、手順7に進みます。 ただし、今後はカスタムオプションを使用しないことをお勧めします。使用しないように選択した機能が必要になる場合があります。
- ステップ7 *-すぐにポップアップウィンドウが表示され、インストールに時間がかかります。 これは、すべてのコンポーネントをインストールするためのものです。
- ステップ8 *-最後に、インストールが正常に完了したというメッセージをウィンドウに表示できます。 *完了*をクリックします。
Visual Studio 2010でLINQを使用してC#プログラムを作成する
- Visual Studio 2010 Ultimateエディションを起動し、メニューから[ファイル]、[新規プロジェクト]の順に選択します。
- 新しいプロジェクトダイアログボックスが画面に表示されます。
- 次に、インストール済みテンプレートの下のカテゴリとしてVisual C#を選択し、次の図に示すようにコンソールアプリケーションテンプレートを選択します。
- 下部の名前ボックスにプロジェクトに名前を付けて、[OK]を押します。
- 新しいプロジェクトは、画面上の新しいダイアログボックスの右側のソリューションエクスプローラーに表示されます。
- ソリューションエクスプローラーからProgram.csを選択すると、「システムを使用」で始まるエディターウィンドウでコードを表示できます。
- ここで、次のC#プログラムのコーディングを開始できます。
- F5キーを押して、プロジェクトを実行します。 プロジェクトを実行する前に*ファイル*→*すべて保存*を選択してプロジェクトを保存することを強くお勧めします。
Visual Studio 2010でLINQを使用してVBプログラムを作成する
- Visual Studio 2010 Ultimateエディションを起動し、メニューから[ファイル]、[新規プロジェクト]の順に選択します。
- 新しいプロジェクトダイアログボックスが画面に表示されます。
- ここで、インストール済みテンプレートの下のカテゴリとしてVisual Basicを選択し、次にコンソールアプリケーションテンプレートを選択します。
- 下部の名前ボックスにプロジェクトに名前を付けて、[OK]を押します。
- Module1.vbの画面が表示されます。 LINQを使用して、ここでVBコードの記述を開始します。
- F5キーを押して、プロジェクトを実行します。 プロジェクトを実行する前に*ファイル*→*すべて保存*を選択してプロジェクトを保存することを強くお勧めします。
上記のC#またはVBのコードをコンパイルして実行すると、次の結果が生成されます-
LINQ-クエリ演算子
クエリパターンを形成する一連の拡張メソッドは、LINQ Standard Query Operatorsと呼ばれます。 LINQクエリ式の構成要素として、これらの演算子はフィルタリング、並べ替え、投影、集計などのさまざまなクエリ機能を提供します。
LINQ標準クエリ演算子は、機能に基づいて次のカテゴリに分類できます。
- フィルタリング演算子
- 結合演算子
- 投影操作
- ソート演算子
- グループ化演算子
- コンバージョン数
- 連結
- 集約
- 量指定子の操作
- パーティション操作
- 発電事業
- セット操作
- 平等
- 要素演算子
フィルタリング演算子
フィルタリングは、特定の条件を満たす選択された要素のみを持つように結果セットを制限する操作です。
link:/linq/linq_filtering_operators [例を表示]
Operator | Description | C# Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
where | Filter values based on a predicate function | where | Where |
OfType | Filter values based on their ability to be as a specified type | Not Applicable | Not Applicable |
結合演算子
結合とは、相互の関係を直接的な方法で追跡することが困難なデータソースを対象とする操作を指します。
link:/linq/linq_join_operators [例を表示]
Operator | Description | C# Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
Join | The operator join two sequences on basis of matching keys | join … in … on … equals … | From x In …, y In … Where x.a = y.a |
GroupJoin | Join two sequences and group the matching elements | join … in … on … equals … into … | Group Join … In … On … |
投影操作
投影とは、オブジェクトを特定のプロパティのみを持つまったく新しいフォームに変換する操作です。
リンク:/linq/linq_projection_operations [例を表示]
Operator | Description | C# Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
Select | The operator projects values on basis of a transform function | select | Select |
SelectMany | The operator project the sequences of values which are based on a transform function as well as flattens them into a single sequence | Use multiple from clauses | Use multiple From clauses |
ソート演算子
ソート操作を使用すると、単一または複数の属性に基づいてシーケンスの要素を並べることができます。
link:/linq/linq_sorting_operators [例を表示]
Operator | Description | C# Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
OrderBy | The operator sort values in an ascending order | orderby | Order By |
OrderByDescending | The operator sort values in a descending order | orderby … descending | Order By … Descending |
ThenBy | Executes a secondary sorting in an ascending order | orderby …, … | Order By …, … |
ThenByDescending | Executes a secondary sorting in a descending order | orderby …, … descending | Order By …, … Descending |
Reverse | Performs a reversal of the order of the elements in a collection | Not Applicable | Not Applicable |
グループ化演算子
オペレーターは、共通の共有属性に基づいていくつかのグループにデータを入れます。
link:/linq/linq_grouping_operators [例を表示]
Operator | Description | C# Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
GroupBy | Organize a sequence of items in groups and return them as an IEnumerable collection of type IGrouping<key, element> | group … by -or- group … by … into … | Group … By … Into … |
ToLookup | Execute a grouping operation in which a sequence of key pairs are returned | Not Applicable | Not Applicable |
コンバージョン数
演算子は入力オブジェクトのタイプを変更し、さまざまなアプリケーションで使用されます。
link:/linq/linq_conversions [例を表示]
Operator | Description | C# Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
AsEnumerable | Returns the input typed as IEnumerable<T> | Not Applicable | Not Applicable |
AsQueryable | A (generic) IEnumerable is converted to a (generic) IQueryable | Not Applicable | Not Applicable |
Cast | Performs casting of elements of a collection to a specified type | Use an explicitly typed range variable. Eg:from string str in words | From … As … |
OfType | Filters values on basis of their , depending on their capability to be cast to a particular type | Not Applicable | Not Applicable |
ToArray | Forces query execution and does conversion of a collection to an array | Not Applicable | Not Applicable |
ToDictionary | On basis of a key selector function set elements into a Dictionary<TKey, TValue> and forces execution of a LINQ query | Not Applicable | Not Applicable |
ToList | Forces execution of a query by converting a collection to a List<T> | Not Applicable | Not Applicable |
ToLookup | Forces execution of a query and put elements into a Lookup<TKey, TElement> on basis of a key selector function | Not Applicable | Not Applicable |
連結
2つのシーケンスの連結を実行します。これは、重複を削除しないという事実を除いて、操作に関してはUnion演算子に非常に似ています。
link:/linq/linq_concatenation [例を表示]
Operator | Description | C# Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
Concat | Two sequences are concatenated for the formation of a single one sequence. | Not Applicable | Not Applicable |
集約
任意のタイプの必要な集計を実行し、LINQでカスタム集計を作成できます。
link:/linq/linq_aggregation [例を表示]
Operator | Description | C# Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
Aggregate | Operates on the values of a collection to perform custom aggregation operation | Not Applicable | Not Applicable |
Average | Average value of a collection of values is calculated | Not Applicable | Aggregate … In … Into Average() |
Count | Counts the elements satisfying a predicate function within collection | Not Applicable | Aggregate … In … Into Count() |
LonCount | Counts the elements satisfying a predicate function within a huge collection | Not Applicable | Aggregate … In … Into LongCount() |
Max | Find out the maximum value within a collection | Not Applicable | Aggregate … In … Into Max() |
Min | Find out the minimum value existing within a collection | Not Applicable | Aggregate … In … Into Min() |
Sum | Find out the sum of a values within a collection | Not Applicable | Aggregate … In … Into Sum() |
量指定子の操作
これらの演算子はブール値、つまり シーケンス内の一部またはすべての要素が特定の条件を満たす場合に真または偽。
link:/linq/linq_quantifier_operations [例を表示]
Operator | Description | C# Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
All | Returns a value ‘True’ if all elements of a sequence satisfy a predicate condition | Not Applicable | Aggregate … In … Into All(…) |
Any | Determines by searching a sequence that whether any element of the same satisfy a specified condition | Not Applicable | Aggregate … In … Into Any() |
Contains | Returns a ‘True’ value if finds that a specific element is there in a sequence if the sequence doe not contains that specific element , ‘false’ value is returned | Not Applicable | Not Applicable |
パーティション演算子
入力シーケンスを2つのセクションに分割します。シーケンスの要素を並べ替えてから1つを返すことはありません。
link:/linq/linq_partition_operators [例を表示]
Operator | Description | C# Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
Skip | Skips some specified number of elements within a sequence and returns the remaining ones | Not Applicable | Skip |
SkipWhile | Same as that of Skip with the only exception that number of elements to skip are specified by a Boolean condition | Not Applicable | Skip While |
Take | Take a specified number of elements from a sequence and skip the remaining ones | Not Applicable | Take |
TakeWhile | Same as that of Take except the fact that number of elements to take are specified by a Boolean condition | Not Applicable | Take While |
発電事業
世代演算子によって新しい値のシーケンスが作成されます。
リンク:/linq/linq_generation_operations [例を表示]
Operator | Description | C# Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
DefaultIfEmpty | When applied to an empty sequence, generate a default element within a sequence | Not Applicable | Not Applicable |
Empty | Returns an empty sequence of values and is the most simplest generational operator | Not Applicable | Not Applicable |
Range | Generates a collection having a sequence of integers or numbers | Not Applicable | Not Applicable |
Repeat | Generates a sequence containing repeated values of a specific length | Not Applicable | Not Applicable |
セット操作
集合演算には4つの演算子があり、それぞれ異なる基準に基づいて結果を生成します。
link:/linq/linq_set_operations [例を表示]
Operator | Description | C# Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
Distinct | Results a list of unique values from a collection by filtering duplicate data if any | Not Applicable | Distinct |
Except | Compares the values of two collections and return the ones from one collection who are not in the other collection | Not Applicable | Not Applicable |
Intersect | Returns the set of values found t be identical in two separate collections | Not Applicable | Not Applicable |
Union | Combines content of two different collections into a single list that too without any duplicate content | Not Applicable | Not Applicable |
平等
2つの文(列挙可能)を比較し、それらが完全に一致するかどうかを判断します。
link:/linq/linq_equality [例を表示]
Operator | Description | C# Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
SequenceEqual | Results a Boolean value if two sequences are found to be identical to each other | Not Applicable | Not Applicable |
要素演算子
DefaultIfEmptyを除き、残りの8つの標準クエリ要素演算子はすべて、コレクションから単一の要素を返します。
link:/linq/linq_element_operators [例を表示]
Operator | Description | C# Query Expression Syntax | VB Query Expression Syntax |
---|---|---|---|
ElementAt | Returns an element present within a specific index in a collection | Not Applicable | Not Applicable |
ElementAtOrDefault | Same as ElementAt except of the fact that it also returns a default value in case the specific index is out of range | Not Applicable | Not Applicable |
First | Retrieves the first element within a collection or the first element satisfying a specific condition | Not Applicable | Not Applicable |
FirstOrDefault | Same as First except the fact that it also returns a default value in case there is no existence of such elements | Not Applicable | Not Applicable |
Last | Retrieves the last element present in a collection or the last element satisfying a specific condition | Not Applicable | Not Applicable |
LastOrDefault | Same as Last except the fact that it also returns a default value in case there is no existence of any such element | Not Applicable | Not Applicable |
Single | Returns the lone element of a collection or the lone element that satisfy a certain condition | Not Applicable | Not Applicable |
SingleOrDefault | Same as Single except that it also returns a default value if there is no existence of any such lone element | Not Applicable | Not Applicable |
DefaultIfEmpty | Returns a default value if the collection or list is empty or null | Not Applicable | Not Applicable |
LINQ-SQL
LINQ to SQLは、リレーショナルデータをオブジェクトとして管理するためのインフラストラクチャ(ランタイム)を提供します。 これは.NET Frameworkのバージョン3.5のコンポーネントであり、オブジェクトモデルの言語統合クエリのSQLへの変換を適切に実行します。 これらのクエリは、実行のためにデータベースに送信されます。 データベースから結果を取得した後、LINQ to SQLは再び結果をオブジェクトに変換します。
LINQ To SQLの紹介
ほとんどのASP.NET開発者にとって、LINQ to SQL(DLINQとも呼ばれます)は、Language Integrated Queryの通電部分です。これにより、通常のLINQ式を使用してSQLサーバーデータベースのデータをクエリできるようになります。 また、データの更新、削除、挿入も可能ですが、唯一の欠点は、SQLサーバーデータベースへの制限です。 ただし、ADO.NETを介したLINQ to SQLには、複雑さの軽減、コーディングの数行など、多くの利点があります。
以下は、LINQ to SQLの実行アーキテクチャを示す図です。
LINQ to SQLの使用方法
- ステップ1 *-データベースサーバーとの新しい「データ接続」を作成します。 表示&arrar;サーバーエクスプローラー&arrar;データ接続&arrar;接続を追加
- ステップ2 *-LINQ To SQLクラスファイルを追加する
- ステップ3 *-データベースからテーブルを選択し、新しいLINQ to SQLクラスファイルにドラッグアンドドロップします。
- ステップ4 *-テーブルをクラスファイルに追加しました。
LINQ to SQLを使用したクエリ
LINQ to SQLを使用してクエリを実行するためのルールは、標準のLINQクエリのルールと同様です。 クエリは遅延または即時に実行されます。 LINQ to SQLを使用したクエリの実行で役割を果たすさまざまなコンポーネントがありますが、これらは次のコンポーネントです。
- LINQ to SQL API -アプリケーションに代わってクエリの実行を要求し、LINQ to SQL Providerに送信します。
- LINQ to SQL Provider -クエリをTransact SQL(T-SQL)に変換し、新しいクエリをADO Providerに送信して実行します。
- * ADOプロバイダー*-クエリの実行後、DataReaderの形式で結果をLINQ to SQLプロバイダーに送信し、SQLプロバイダーはそれをユーザーオブジェクトの形式に変換します。
LINQ to SQLクエリを実行する前に、DataContextクラスを介してデータソースに接続することが重要です。
LINQ To SQLを使用した挿入、更新、削除
追加または挿入
C#
VB
上記のC#またはVBのコードをコンパイルして実行すると、次の結果が生成されます-
更新
C#
VB
上記のC#またはVbのコードをコンパイルして実行すると、次の結果が生成されます-
削除する
C#
VB
上記のC#またはVBのコードをコンパイルして実行すると、次の結果が生成されます-
LINQ-オブジェクト
LINQ to Objectsは、LINQ to SQLまたはLINQ to XMLの場合のように、LINQプロバイダー(API)を必要とせずにインメモリデータコレクションにアクセスするためのIEnumerable <T>をサポートするLINQクエリの使用を提供します。
オブジェクトへのLINQの紹介
LINQ to Objectsのクエリは、通常IEnumerable <T>型の変数のみを返します。 要するに、LINQ to Objectsは、以前のようにコレクションに新しいアプローチを提供します。コレクションからデータを取得するための長いコーディング(非常に複雑な各ループ)を書くことが不可欠でした。取得する必要があります。
また、LINQ to Objectsには、読みやすさ、強力なフィルタリング、グループ化機能、最小限のアプリケーションコーディングでの強化された順序付けなど、従来のforeachループよりも多くの利点があります。 このようなLINQクエリは本質的にコンパクトであり、変更を加えずに、または少し変更するだけで、他のデータソースに移植できます。
以下はオブジェクトの簡単なLINQの例です-
この例では、文字列の配列(ツール)が、LINQ to Objectsを使用してクエリされるオブジェクトのコレクションとして使用されます。
上記のコードをコンパイルして実行すると、次の結果が生成されます-
LINQ to Objectsを使用したメモリコレクションでのクエリ
C#
VB
上記のC#またはVBのコードをコンパイルして実行すると、次の結果が生成されます-
LINQ-データセット
データセットは、メモリ内で非常に有用なデータ表現を提供し、さまざまなデータベースのアプリケーションに使用されます。 LINQ to ADO.NETのテクノロジーの1つとしてのLINQ to Datasetは、データセットのデータに対するクエリの実行を容易にし、生産性を向上させます。
LINQ To Datasetの紹介
LINQ to Datasetは、開発者にとってクエリのタスクを簡単にしました。 特定のクエリ言語でクエリを作成する必要はありませんが、プログラミング言語で作成することもできます。 LINQ to Datasetは、複数のデータソースからデータが統合されている場所のクエリにも使用できます。 また、メモリコレクション内のデータにアクセスするために、LINQ to SQLやLINQ to XMLのようなLINQプロバイダーも必要ありません。
以下は、データソースが最初に取得され、次にデータセットが2つのデータテーブルで満たされるLINQ to Datasetクエリの簡単な例です。 両方のテーブル間に関係が確立され、結合句によって両方のテーブルに対してLINQクエリが作成されます。 最後に、foreachループを使用して、目的の結果を表示します。
C#
VB
上記のC#またはVBのコードをコンパイルして実行すると、次の結果が生成されます-
LinQ to Datasetを使用したデータセットのクエリ
LINQ to Datasetを使用してデータセットのクエリを開始する前に、データをDatasetにロードすることが重要です。これは、DataAdapterクラスを使用するか、LINQ to SQLを使用して行います。 LINQ to Datasetを使用したクエリの定式化は、他のLINQ対応データソースと一緒にLINQを使用してクエリを定式化することに非常に似ています。
単一テーブルクエリ
次の単一テーブルクエリでは、すべてのオンライン注文がSalesOrderHeaderTtableから収集され、注文ID、注文日、注文番号が出力として表示されます。
- C# *
- VB *
上記のC#またはVBのコードをコンパイルして実行すると、次の結果が生成されます-
LINQ-XML
LINQ to XMLは、標準クエリ演算子、プログラミングインターフェイスなどのすべてのLINQ機能への簡単なアクセスを提供します。 .NETフレームワークに統合されたLINQ to XMLは、デバッグ、コンパイル時のチェック、厳密な型指定など、.NETフレームワークの機能を最大限に活用します。
LINQ to XMLの紹介
LINQ to XMLを使用している間、XMLドキュメントをメモリに読み込むのは簡単で、クエリとドキュメントの変更はより簡単です。 また、メモリ内に存在するXMLドキュメントをディスクに保存し、シリアル化することもできます。 開発者がやや複雑なXMLクエリ言語を習得する必要がなくなります。
LINQ to XMLは、System.Xml.Linq名前空間にその力を持っています。 これには、XMLを操作するために必要な19のクラスがすべてあります。 これらのクラスは次のとおりです。
- XAttribute
- XCData
- XComment
- XContainer
- XDeclaration
- XDocument
- XDocumentType
- XElement
- XName
- XNamespace
- XNode
- XNodeDocumentOrderComparer
- XNodeEqualityComparer
- XObject
- XObjectChange
- XObjectChangeEventArgs
- XObjectEventHandler
- XProcessingInstruction
- XText
LINQを使用してXMLファイルを読み取る
C#
VB
上記のC#またはVBのコードをコンパイルして実行すると、次の結果が生成されます-
新しいノードを追加
C#
VB
上記のC#またはVBのコードをコンパイルして実行すると、次の結果が生成されます-
特定のノードを削除する
C#
VB
上記のC#またはVBのコードをコンパイルして実行すると、次の結果が生成されます-
LINQ-エンティティ
ADO.NET Entity Frameworkの一部であるLINQ to Entitiesは、LINQ to SQLよりも柔軟性がありますが、その複雑さと主要な機能の欠如によりあまり人気がありません。 ただし、LINQ to EntitiesはOracle、MySQLなどの多数のデータプロバイダーでのデータクエリを容易にするため、SQLサーバーデータベースでのみデータクエリを許可するLINQ to SQLの制限はありません。
さらに、ユーザーがLINQ to Entitiesを介してクエリを実行するためにデータソースコントロールを利用でき、余分なコーディングを必要とせずに結果をバインドできるという意味で、ASP.Netから主要なサポートを受けています。
LINQ to Entitiesは、これらの利点のために、今日のデータベースでLINQを使用するための標準メカニズムになっています。 LINQ to Entitiesを使用して、クエリされたデータの詳細を変更し、バッチ更新を簡単にコミットすることもできます。 LINQ to Entitiesの最も興味深い事実は、SQLと同じ構文を持ち、Join、Select、OrderByなどの標準クエリ演算子の同じグループさえ持っていることです。
LINQ to Entitiesクエリの作成および実行プロセス
- ObjectContext (エンティティ接続)からの ObjectQuery インスタンスの構築
- 新しく構築されたインスタンスを使用して、C#またはVisual Basic(VB)でクエリを作成する
- LINQの標準クエリ演算子とLINQ式のコマンドツリーへの変換
- 発生した例外をクライアントに直接渡すクエリを実行する
- すべてのクエリ結果をクライアントに返す
ここでは、 ObjectContext は、 Entity Data Model との対話を可能にする主要なクラスです。つまり、LINQをデータベースに接続するブリッジとして機能します。 ここでのコマンドツリーは、Entityフレームワークと互換性のあるクエリ表現です。
一方、Entity Frameworkは、実際には*オブジェクトリレーショナルマッパー*であり、ビジネスオブジェクトやデータベーステーブルごとのエンティティを生成し、作成、更新、削除などのさまざまな基本操作を容易にする開発者によってORMと略されます。読んで。 次の図は、エンティティフレームワークとそのコンポーネントを示しています。
エンティティモデルでLINQを使用したADD、UPDATE、およびDELETEの例
以下の手順に従って、最初にエンティティモデルを追加します。
- ステップ1 *-プロジェクトを右クリックして[新しい項目を追加]をクリックすると、以下のようにウィンドウが開きます。 ADO.NET Entity Data Modelを選択し、名前を指定して[追加]をクリックします。
ステップ2 *-[データベースから生成]を選択します。
- ステップ3 *-ドロップダウンメニューから[データベース接続]を選択します。
- ステップ4 *-すべてのテーブルを選択します。
次に、次のコードを記述します。
上記のコードをコンパイルして実行すると、次の結果が生成されます-
LINQ-ラムダ式
「ラムダ式」という用語は、関数の定義に適用される数学表記法である「ラムダ」計算に由来しています。 LINQ方程式の実行可能部分としてのラムダ式は、実行時にロジックを変換して、データソースに簡単に渡すことができるようにします。 ただし、ラムダ式は、LINQでのみアプリケーションを見つけることに限定されていません。
これらの式は、次の構文で表されます-
これは、ラムダ式の例です-
y⇒y *y
上記の式はyという名前のパラメーターを指定し、yの値は2乗されます。 ただし、この形式でラムダ式を実行することはできません。 C#のラムダ式の例を以下に示します。
C#
VB
上記のC#またはVBのコードをコンパイルして実行すると、次の結果が生成されます-
式ラムダ
上記のラムダ式の構文の式は右側にあるため、これらは式ラムダとも呼ばれます。
非同期ラムダ
asyncキーワードを使用して非同期処理を組み込むことにより作成されるラムダ式は、非同期ラムダと呼ばれます。 以下は非同期ラムダの例です。
標準クエリ演算子のラムダ
クエリ演算子内のラムダ式は、オンデマンドで同じものによって評価され、シーケンス全体ではなく、入力シーケンスの各要素に対して継続的に機能します。 開発者は、Lambda式によって独自のロジックを標準クエリ演算子にフィードすることが許可されています。 以下の例では、開発者は「Where」演算子を使用して、ラムダ式を使用して特定のリストから奇数値を回収しています。
C#
VB
上記のコードをコンパイルして実行すると、次の結果が生成されます-
Lambdaの型推論
C#では、型推論はさまざまな状況で便利に使用されますが、型を明示的に指定することもありません。 ただし、ラムダ式の場合、型の推論は、コンパイラが満たされる必要があるため、各型が指定されている場合にのみ機能します。 次の例を考えてみましょう。
ここで、コンパイラは型推論を使用して、xが整数であるという事実を利用します。これは、Transformerのパラメーターの型を調べることで行われます。
Lambda式の変数スコープ
ラムダ式内で開始される変数が外部メソッドで表示されることを意図していないなど、ラムダ式で変数スコープを使用する際にいくつかのルールがあります。 また、キャプチャされた変数は、それを参照するデリゲートがガベージコレクションの動作に適格にならない限り、ガベージコレクションされないというルールがあります。 さらに、ラムダ式内のreturnステートメントを使用して、囲んでいるメソッドを返すことを禁止するルールがあります。
以下は、ラムダ式の変数スコープを示す例です。
上記のコードをコンパイルして実行すると、次の結果が生成されます-
式ツリー
ラムダ式は Expression Tree 構築で広範囲に使用されます。 式ツリーは、すべてのノード自体がメソッド呼び出しのような式であるか、x <yのような二項演算であるツリーに似たデータ構造のコードを提供します。 以下は、式ツリーを構築するためのラムダ式の使用例です。
ステートメントラムダ
2つまたは3つのステートメントで構成される*ステートメントラムダ*もありますが、式ツリーの構築には使用されません。 returnステートメントは、ステートメントlambdaで記述する必要があります。
ステートメントlambdaの構文
ステートメントラムダの例
上記のコードをコンパイルして実行すると、次の結果が生成されます-
ラムダは、メソッドに基づくLINQクエリの引数として使用され、 is や as のような演算子の左側に匿名メソッドのような場所を置くことは許可されません。 Lambda式は匿名メソッドによく似ていますが、これらはデリゲートとしてのみ使用されるように制限されていません。
ラムダ式を使用する際の注意点
- ラムダ式は値を返すことができ、パラメーターを持つことができます。
- パラメーターは、ラムダ式を使用してさまざまな方法で定義できます。
- ラムダ式に単一のステートメントがある場合、中括弧の必要はありませんが、複数のステートメントがある場合、中括弧と戻り値は書くのに不可欠です。
- ラムダ式では、クロージャーと呼ばれる機能により、ラムダ式ブロックの外側にある変数にアクセスできます。 問題を回避するために、クロージャーの使用は慎重に行う必要があります。
- ラムダ式内で安全でないコードを実行することは不可能です。
- ラムダ式は、演算子の左側で使用するためのものではありません。
LINQ-ASP.Net
NETフレームワークの拡張セットとして、LINQはASP.NET開発者によるデータアクセスの推奨メカニズムです。 ASP.NET 3.5には、LINQをASP.NETで簡単に使用できるようにするLINQDataSourceコントロールが組み込まれています。 ASP.NETは、上記のコントロールをデータソースとして使用します。 現実のプロジェクトは主にWebサイトまたはWindowsアプリケーションを含むため、ASP.NETでのLINQの概念をよりよく理解するために、LINQ機能を利用するASP.NET Webサイトの作成から始めましょう。.
このためには、システムにVisual Studioと.NETフレームワークをインストールすることが不可欠です。 Visual Studioを開いたら、ファイル→新規→Webサイトに移動します。 下の図に示すように、ポップアップウィンドウが開きます。
次に、左側のテンプレートの下に、Webサイトを作成するための2つの言語オプションがあります。 * Visual C#を選択し、 *ASP.NET Empty Web Site を選択します。
システム上の新しいWebサイトを保存するフォルダーを選択します。 OK を押すと、すぐに Solution Explorer がすべてのWebファイルを含む画面に表示されます。 ソリューションエクスプローラーでDefault.aspxを右クリックし、ブラウザーで表示を選択して、ブラウザーでデフォルトのASP.NET Webサイトを表示します。 次のスクリーンショットに示すように、すぐに新しいASP.NET WebサイトがWebブラウザーで開きます。
LINQDataSourceコントロール
aspx is in fact the major file extension used in ASP.NET websites. Visual Studio by default creates all the necessary pages for a basic website like Home page *and About Us* page where you can place your content conveniently. The code for the website is generated automatically here and can be viewed too..
LINQDataSourceコントロールを使用して、ASP.NET Webサイトのページのデータを*更新、挿入*および*削除*することができます。 LINQDataSourceコントロールはそのような操作のために動的に作成されたコマンドを使用するため、SQLコマンドを指定する必要はまったくありません。
このコントロールにより、ユーザーはマークアップテキストのプロパティ設定により、ASP.NET WebページでLINQを便利に使用できます。 LINQDataSourceは、 SqlDataSource や ObjectDataSource などのコントロールと非常によく似ています。ページにある他のASP.NETコントロールをデータソースにバインドする際に使用できます。 そのため、LINQDataSourceコントロールによって呼び出されるさまざまな機能を説明するための*データベース*が必要です。
ASP.NET Webページフォームでのコントロールの使用法の説明を始める前に、Microsoft Visual Studioツールボックスを開き、下図のようにASP.NET Webサイトの.aspxページにLINQDataSourceコントロールをドラッグアンドドロップすることが不可欠です。
次の手順では、従業員レコードのすべての列を選択して、LINQDataSourceを構成します。
次に、GridViewコントロールを.aspxページに追加し、次の図に示すように構成します。 GridViewコントロールは強力で、データを操作する柔軟性を提供します。 コントロールを設定するとすぐに、ブラウザに表示されます。
aspxページの画面に表示できるコーディングは次のようになります-.
ここで、プロパティContextTypeNameをデータベースを表すクラスのプロパティに設定することが重要であることに注意してください。 たとえば、ここではLINQWebApp1.AdventureWorksDataContextとして指定されています。このアクションにより、LINQDataSourceとデータベースの間に必要な接続が確立されるためです。
LINQを使用したASP.NETページでのデータの挿入、更新、削除
上記のすべてのステップを厳密に完了した後、 LINQDataSource Control から LINQDataSource Tasks を選択し、次のスクリーンショットに示すように、挿入を有効にし、更新を有効にし、同じから削除を有効にする3つのボックスをすべて選択します。
すぐに、宣言型マークアップが次のように画面に表示されます。
複数の行と列があるので、グリッドの選択された行の詳細のみを表示するために、グリッドビューコントロールの下に詳細ビューまたはマスターコントロールという名前の別のコントロールを.aspxフォームに追加することをお勧めします。 詳細ビューコントロールから詳細ビュータスクを選択し、以下に示すようにチェックボックスをオンにします。
次に、変更を保存し、Ctrl + F5キーを押してブラウザーでページを表示します。ここで、詳細ビューコントロールのレコードを削除、更新、挿入できます。