方法: LINQ を使用したデータの数、合計、または平均の算出 (Visual Basic)

統合言語クエリ (LINQ) を使用すると、データベース情報に簡単にアクセスしてクエリを実行できます。

次の例は、SQL Server データベースに対してクエリを実行する新しいアプリケーションを作成する方法を示しています。 このサンプルでは、AggregateGroup By 句を使用して、結果の数、合計、平均を算出します。 詳細については、「Aggregate 句」および「Group By 句」を参照してください。

このトピックの例では、Northwind サンプル データベースを使用します。 開発用コンピューターにこのデータベースがない場合は、Microsoft ダウンロード センターからダウンロードできます。 手順については、「サンプル データベースのダウンロード」を参照してください。

注意

次の手順で参照している Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前や場所が異なる場合があります。 これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。 詳細については、「IDE をカスタマイズする」をご覧ください。

データベースへの接続を作成するには

  1. Visual Studio で、 [表示] メニューの [サーバー エクスプローラー]/[データベース エクスプローラー] をクリックして、 [サーバー エクスプローラー]/[データベース エクスプローラー] を開きます。

  2. [サーバー エクスプローラー]/[データベース エクスプローラー][データ接続] を右クリックし、 [接続の追加] をクリックします。

  3. Northwind サンプル データベースへの有効な接続を指定します。

LINQ to SQL ファイルを含むプロジェクトを追加するには

  1. Visual Studio で、 [ファイル] メニューの [新規作成] をポイントし、 [プロジェクト] をクリックします。 プロジェクト タイプとして Visual Basic [Windows フォーム アプリケーション] を選択します。

  2. [プロジェクト] メニューの [新しい項目の追加] をクリックします。 [LINQ to SQL クラス] 項目テンプレートを選択します。

  3. そのファイルに northwind.dbml という名前を付けます。 [追加] をクリックします。 オブジェクト リレーショナル デザイナー (O/R デザイナー) が northwind.dbml ファイル用に開きます。

O/R デザイナーにクエリを実行するテーブルを追加するには

  1. [サーバー エクスプローラー]/[データベース エクスプローラー] で、Northwind データベースへの接続を展開します。 [テーブル] フォルダーを展開します。

    O/R デザイナーを閉じている場合は、前に追加した northwind.dbml ファイルをダブルクリックして再度開くことができます。

  2. Customers テーブルをクリックし、デザイナーの左ペインにドラッグします。 Orders テーブルをクリックし、デザイナーの左ペインにドラッグします。

    デザイナーによって、プロジェクトの新しい CustomerOrder オブジェクトが作成されます。 デザイナーによってテーブル間のリレーションシップが自動的に検出され、関連するオブジェクトの子プロパティが作成されることに注目してください。 たとえば、IntelliSense では、Customer オブジェクトに、その顧客に関連するすべての注文の Orders プロパティがあることを示します。

  3. 変更を保存し、デザイナーを閉じます。

  4. プロジェクトを保存します。

データベースに対してクエリを実行し、結果を表示するコードを追加するには

  1. [ツールボックス] から、プロジェクトの既定の Windows フォームである Form1 に DataGridView コントロールをドラッグします。

  2. Form1 をダブルクリックして、フォームの Load イベントにコードを追加します。

  3. テーブルを O/R デザイナーに追加したときに、デザイナーによって DataContext オブジェクトがプロジェクトに追加されました。 このオブジェクトには、これらのテーブルにアクセスするため、および各テーブルの個々のオブジェクトとコレクションにアクセスするために必要なコードが含まれます。 プロジェクトの DataContext オブジェクトの名前は、.dbml ファイルの名前に基づいて付けられます。 このプロジェクトでは、DataContext オブジェクトに northwindDataContext という名前が付けられています。

    コード内で DataContext のインスタンスを作成し、O/R デザイナーによって指定されたテーブルに対してクエリを実行できます。

    DataContext のプロパティとして公開されているテーブルに対してクエリを実行し、結果の数、合計、および平均を算出するために、Load イベントに次のコードを追加します。 このサンプルでは、Aggregate 句を使用して 1 つの結果に対してクエリを実行し、Group By 句を使用してグループ化された結果の平均を表示します。

    Dim db As New northwindDataContext
    Dim msg = ""
    
    Dim londonCustomerCount = Aggregate cust In db.Customers
                              Where cust.City = "London"
                              Into Count()
    msg &= "Count of London Customers: " & londonCustomerCount & vbCrLf
    
    Dim averageOrderCount = Aggregate cust In db.Customers
                            Where cust.City = "London"
                            Into Average(cust.Orders.Count)
    msg &= "Average number of Orders per customer: " &
           averageOrderCount & vbCrLf
    
    Dim venezuelaTotalOrders = Aggregate cust In db.Customers
                               Where cust.Country = "Venezuela"
                               Into Sum(cust.Orders.Count)
    msg &= "Total number of orders from Customers in Venezuela: " &
           venezuelaTotalOrders & vbCrLf
    
    MsgBox(msg)
    
    Dim averageCustomersByCity = From cust In db.Customers
                                 Group By cust.City
                                 Into Average(cust.Orders.Count)
                                 Order By Average
    
    DataGridView1.DataSource = averageCustomersByCity
    
    'Another way to grab the count and sum
    
    londonCustomerCount = (From cust in db.Customers
                           Where cust.City = "London").Count()
    
    venezuelaTotalOrders = (From cust in db.Customers
                            Where cust.Country = "Venezuela"
                            Select cust.Orders).Sum()
    
  4. F5 キーを押してプロジェクトを実行し、結果を表示します。

関連項目