C# LINQ でのクエリの作成

C Linq Denokuerino Zuo Cheng



SQL と同様に、クエリ構文を使用して C# LINQ でクエリを作成できます。これらのクエリは、Web 上の C# データベース アプリケーションで使用され、データベースからデータを取得し、Web 上でサードパーティ ユーザーに表示します。このガイドでは、SQL に似たいくつかの LINQ クエリについて説明します。このために、リスト データ ソースを作成し、そこにクエリを適用します。

クエリ構文:

一般的な構文を見てみましょう。

から イテレータ 情報元
選択する イテレータ ;

ここ:







  1. Data_Source は、データを保持するリストにすることができます。
  2. イテレータは、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 ) ;
  1. Skip() は、レコードをスキップして残りのレコードを返すために使用されます。スキップする要素の数を指定する整数を受け取ります。私たちの場合、それは 0 です。
  2. 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() 演算子を利用しました。