クエリ構文:
一般的な構文を見てみましょう。
から イテレータ の 情報元選択する イテレータ ;
ここ:
- Data_Source は、データを保持するリストにすることができます。
- イテレータは、Data_Source から要素をフェッチするために使用されます。
情報元
このガイド全体では、次のレコードのリストをデータ ソースとして使用し、すべてのクエリはこのデータ ソースにのみ適用されます。このコードを実際の環境で実行し、これから説明する次の例でクエリ ステートメントを 1 つずつ変更してください。
使用して システム ;
使用して System.Collections.Generic ;
使用して System.Linq ;
使用して システムコレクション ;
公共 クラス 計算
{
公共 静的 空所 主要 ( )
{
// リストの作成
国の価格をリストする = 新しい リスト ( ) {
// 5 つのレコードをリストに追加します
新しい 価格 ( ) { アイテム = 「フルーツ」 、位置 = 'アメリカ合衆国' 、 量 = 100 、 料金 = 345.78 } 、
新しい 価格 ( ) { アイテム = 'ナッツ' 、位置 = 'インド' 、 量 = 200 、 料金 = 3645.78 } 、
新しい 価格 ( ) { アイテム = 「その他」 、位置 = 'イギリス' 、 量 = 500 、 料金 = 90.68 } 、
新しい 価格 ( ) { アイテム = '油' 、位置 = 'アメリカ合衆国' 、 量 = 100 、 料金 = 345.78 } 、
新しい 価格 ( ) { アイテム = 'チリ' 、位置 = 'アメリカ合衆国' 、 量 = 10 、 料金 = 67.89 } 、
} ;
フォーリーチ ( だった 私 の 国の価格 )
{
コンソール 。 ライトライン ( 私 。 アイテム + 「」 + 私 。 位置 + 「」 + 私 。 量 + 「」 + 私 。 料金 ) ;
}
}
}
公共 クラス 価格 {
公共 弦 アイテム { 得る ; 設定 ; }
公共 弦 位置 { 得る ; 設定 ; }
公共 整数 量 { 得る ; 設定 ; }
公共 ダブル 料金 { 得る ; 設定 ; }
}
記録:
説明:
1. 次の属性を使用して価格を作成します。
2. main メソッドで「Calculations」という別のクラスを作成し、5 つのレコードを持つ country_prices リストを作成します。
選択する
基本的に、「select」は、指定されたデータ ソースから属性を選択する射影演算子です。クエリは「from」で始まります。次に、データ ソースを反復処理するイテレータを指定します。次に、「select」演算子を指定します。
構文:
すべての属性: Data_Source のイテレータからイテレータを選択します。
特定の属性: Data_Source のイテレータから iterator.attribute を選択します。
例 1:
リストからすべてのレコードを選択するクエリを作成してみましょう。
使用して システム ;使用して System.Collections.Generic ;
使用して System.Linq ;
使用して システムコレクション ;
公共 クラス 計算
{
公共 静的 空所 主要 ( )
{
// リストの作成
国の価格をリストする = 新しい リスト ( ) {
// 5 つのレコードをリストに追加します
新しい 価格 ( ) { アイテム = 「フルーツ」 、位置 = 'アメリカ合衆国' 、 量 = 100 、 料金 = 345.78 } 、
新しい 価格 ( ) { アイテム = 'ナッツ' 、位置 = 'インド' 、 量 = 200 、 料金 = 3645.78 } 、
新しい 価格 ( ) { アイテム = 「その他」 、位置 = 'イギリス' 、 量 = 500 、 料金 = 90.68 } 、
新しい 価格 ( ) { アイテム = '油' 、位置 = 'アメリカ合衆国' 、 量 = 100 、 料金 = 345.78 } 、
新しい 価格 ( ) { アイテム = 'チリ' 、位置 = 'アメリカ合衆国' 、 量 = 10 、 料金 = 67.89 } 、
} ;
//クエリ内の演算子を選択します
だった データ = から 私 の 国の価格
選択する 私 ;
フォーリーチ ( だった 私 の データ )
{
コンソール 。 ライトライン ( 私 。 アイテム + 「」 + 私 。 位置 + 「」 + 私 。 量 + 「」 + 私 。 料金 ) ;
}
}
}
公共 クラス 価格 {
公共 弦 アイテム { 得る ; 設定 ; }
公共 弦 位置 { 得る ; 設定 ; }
公共 整数 量 { 得る ; 設定 ; }
公共 ダブル 料金 { 得る ; 設定 ; }
}
出力:
ここでは、「select」クエリに属性を指定しませんでした。イテレータを使用して、「foreach」ループ内のクエリ (データ) からすべての属性を取得しました。
例 2:
ここで、「select」演算子内に item 属性を指定してアイテムを取得します。質問は「 country_prices の i から i.item を選択します ”。
// クエリで項目属性を取得するための演算子を選択しますだった データ = から 私 の 国の価格
選択する 私 。 アイテム ;
フォーリーチ ( だった 私 の データ )
{
コンソール 。 ライトライン ( 私 ) ;
}
出力:
行番号 21 ~ 行番号 29:
2. どこで
いくつかの条件に基づいてデータをフィルタリングする場合は、クエリ内で「select」句とともに「where」演算子を使用できます。ただし、「where」演算子が最初に使用され、次に選択演算子が指定されます。
構文:
LINQ クエリ内で「where」演算子を使用する方法を見てみましょう。
から イテレータ の 情報元どこ 状態 / s
選択する イテレータ 。 属性 ;
例 1: 単一条件
item 属性に基づいてレコードをフィルターしましょう。 「where」演算子で等号 (==) 演算子を条件として使用し、反復子を「Chillies」と比較します。そこで、「Chillies」に関連するレコードが選択されます。
クエリは「 country_prices の私から
i.item == 「唐辛子」
私を選択してください」
だった データ = から 私 の 国の価格
どこ 私 。 アイテム == 'チリ'
選択する 私 ;
フォーリーチ ( だった 私 の データ )
{
コンソール 。 ライトライン ( 私 。 アイテム + 「」 + 私 。 位置 + 「」 + 私 。 量 + 「」 + 私 。 料金 ) ;
}
出力:
「Chillies」アイテムを含むレコードは 1 つだけです。
行番号 21 ~ 行番号 30:
例 2: 複数の条件
場所と数量の属性に基づいてレコードをフィルターしましょう。数量は 50 より大きく 300 未満である必要があります。場所は「USA」である必要があります。
クエリは「 country_prices の私から
ここで、i.quantity > 50
ここで、i.quantity < 300
ここで、i.location == 「米国」
私を選択してください」
だった データ = から 私 の 国の価格
どこ 私 。 量 > 50
どこ 私 。 量 < 300
どこ 私 。 位置 == 'アメリカ合衆国'
選択する 私 ;
フォーリーチ ( だった 私 の データ )
{
コンソール 。 ライトライン ( 私 。 アイテム + 「」 + 私 。 位置 + 「」 + 私 。 量 + 「」 + 私 。 料金 ) ;
}
出力:
前の条件に一致するレコードが 2 件あります。
行番号 21 – 行番号 32:
例 3: および (&&) 演算子
「and (&&)」演算子を指定して、一度に複数の条件を指定できます。すべての条件が true の場合、すべての条件を満たすレコードがクエリによって返されます。
この例では、数量が 20 より大きく、コストが 67.89 である場合にレコードを選択します。
クエリは「 country_prices の私から
ここで、i.quantity < 20 && i.cost == 67.89
私を選択してください」
どこ 私 。 量 < 二十 && 私 。 料金 == 67.89
選択する 私 ;
フォーリーチ ( だった 私 の データ )
{
コンソール 。 ライトライン ( 私 。 アイテム + 「」 + 私 。 位置 + 「」 + 私 。 量 + 「」 + 私 。 料金 ) ;
}
出力:
数量が 20 未満でコストが 67.89 のレコードは 1 つだけあります。
行番号 21 ~ 行番号 29:
例 4: または (||) 演算子
「or (||)」演算子は、一度に複数の条件を指定するためにも使用されます。少なくとも 1 つの条件が true の場合、その条件を満たすレコードが返されます。
この例では、数量が 300 を超える場合、または場所が「東京」である場合にレコードを選択します。
クエリは「 country_prices の私から
ここで、i.quantity > 300 || i.location == 「東京」
私を選択してください」
どこ 私 。 量 > 300 || 私 。 位置 == '東京'
選択する 私 ;
フォーリーチ ( だった 私 の データ )
{
コンソール 。 ライトライン ( 私 。 アイテム + 「」 + 私 。 位置 + 「」 + 私 。 量 + 「」 + 私 。 料金 ) ;
}
出力:
数量が 300 を超えるレコードは 1 つだけあります (最初の条件が一致します)。
行番号 21 ~ 行番号 29:
3. 注文方法
LINQ クエリによって返されるレコードを、いずれかの属性の値に基づいて昇順または降順に並べる場合は、クエリで 'order by' 演算子を使用できます。この演算子は「select」演算子の前に指定する必要があります。
構文:
LINQ クエリ内で「order by」演算子を使用する方法を見てみましょう。
昇順:
から イテレータ の 情報元注文 に イテレータ 。 属性 上昇
選択する イテレータ ;
降順:
から イテレータ の 情報元注文 に イテレータ 。 属性 降順
選択する イテレータ ;
例 1: 昇順
データ ソース (リスト) からすべての属性を選択し、数量属性の値に基づいて昇順で返します。
クエリは「 country_prices の私から
i.数量昇順で注文
私を選択してください」
私が注文する 。 量 上昇
選択する 私 ;
フォーリーチ ( だった 私 の データ )
{
コンソール 。 ライトライン ( 私 。 アイテム + 「」 + 私 。 位置 + 「」 + 私 。 量 + 「」 + 私 。 料金 ) ;
}
出力:
行番号 21 ~ 行番号 29:
例 2: 降順
データ ソース (リスト) からすべての属性を選択し、コスト属性の値に基づいて降順で返します。
クエリは「 country_prices の私から
i.コストの降順で並べ替えます
私を選択してください」
私が注文する 。 料金 降順
選択する 私 ;
フォーリーチ ( だった 私 の データ )
{
コンソール 。 ライトライン ( 私 。 アイテム + 「」 + 私 。 位置 + 「」 + 私 。 量 + 「」 + 私 。 料金 ) ;
}
出力:
行番号 21 ~ 行番号 29:
4. リミット
SQL の制限は、クエリによって返されるレコードを制限します。クエリによって返された上位レコードを返します。 LINQ では、Skip() と Take() 演算子を利用することでこれを実現できます。 Take() は、指定された数のレコードを取得します。 Skip() は開始レコード番号を指定するために使用されます。このようにして、LINQ の「制限」機能を実現できます。
構文:
( から イテレータ の 情報元選択する イテレータ ) 。 スキップ ( n ) 。 取った ( n ) ;
- Skip() は、レコードをスキップして残りのレコードを返すために使用されます。スキップする要素の数を指定する整数を受け取ります。私たちの場合、それは 0 です。
- Take() は、最初のレコードから「n」個のレコードを取得するために使用されます。
例:
クエリによって返された 5 つのレコードから最初の 3 つのレコードを選択します。
クエリは「 (country_prices の i より)
select i).Skip(0).Take(3)”
選択する 私 ) 。 スキップ ( 0 ) 。 取った ( 3 ) ;
フォーリーチ ( だった 私 の データ )
{
コンソール 。 ライトライン ( 私 。 アイテム + 「」 + 私 。 位置 + 「」 + 私 。 量 + 「」 + 私 。 料金 ) ;
}
}
出力:
行番号 21 – 行番号 28:
結論
SQL に似た C# LINQ でクエリを作成する方法を学びました。このチュートリアルの一環として、「選択」演算子を使用してデータ ソースからレコードを選択する方法について説明しました。クエリによって返されるレコードをフィルターするには、条件を指定して「where」演算子を使用しました。次に、「order by」演算子を使用してクエリによって返されたレコードを並べ替える方法を学びました。最後に、レコードを制限するために、Skip() および Take() 演算子を利用しました。