連載:[完全版]究極のC#プログラミング

Chapter16 LINQとメソッド構文

川俣 晶
2010/03/29
Page 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

16.12 メソッド構文で複数のソースを関連付ける

 複数のソースを関連付けるjoin句は、「join …… in …… on …… equals ……」といった長い構文であり、equalsのような特殊なキーワードを使う(==演算子は使わない)などの特徴があった(リスト16.13参照)。

using System;
using System.Linq;

class Program
{

  class 商品情報
  {
    public int Id;
    public string 名前;
  }

  class 商品販売価格
  {
    public int Id;
    public int 価格;
  }

  static void Main(string[] args)
  {
    商品情報[] 商品情報データ =
    {
      new 商品情報() { Id = 1, 名前 = "PC-8001" },
      new 商品情報() { Id = 2, 名前 = "MZ-80K" },
      new 商品情報() { Id = 3, 名前 = "Basic Master Level-3" },
    };

    商品販売価格[] 商品販売価格データ =
    {
      new 商品販売価格() { Id = 1, 価格 = 148000 },
      new 商品販売価格() { Id = 2, 価格 = 178000 },
      new 商品販売価格() { Id = 3, 価格 = 229000 },
    };

    var query = from x in 商品情報データ
          join y in 商品販売価格データ on x.Id equals y.Id
          select new { Name = x.名前, Price = y.価格 };

    foreach (var 商品 in query)
    {
      Console.WriteLine("{0} {1:C}", 商品.Name, 商品.Price);
    }
    // 出力:
    // PC-8001 \148,000
    // MZ-80K \178,000
    // Basic Master Level-3 \229,000
  }
}
リスト16.13 複数のソースを関連付ける

 これをメソッド構文に置き換えると、equalsのような特殊キーワードが消滅するのは当然だが、それとは別に興味深い変化が生じる。

 次は実際に置き換えた例である。

var query = 商品情報データ.Join(
              商品販売価格データ,
              (x) => x.Id,
              (y) => y.Id,(x,y) => new {
                Name = x.名前, Price = y.価格 });

 このように、join句はストレートに「Joinメソッド」に置き換えられ、in、on、equalsのようなキーワードはなくなり、すべてJoinメソッドの引数で渡す形になる。

 しかし、ここで注目すべき点は、クエリ式のSelect句に相当する機能もJoinメソッドの引数に指定されている点である。つまり、クエリ式のjoin句をメソッド構文に置き換える際には、実際にはその後のselect句もまとめてJoinメソッド呼び出しに置き換える必要があるのである。


 INDEX
  [完全版]究極のC#プログラミング
  Chapter16 LINQとメソッド構文
    1.16.1 予約語のエスケープ
    2.16.2 メソッド構文のLINQ
    3.16.3 クエリ式とメソッド構文の違い
    4.16.4 絞り込みと結果の生成
    5.16.5 最初の事例の別解
    6.16.6 メソッド構文でのみ可能なクエリ
    7.16.7 メソッド構文のソート
    8.16.8 orderbyの比較オブジェクト
    9.16.9 メソッド構文の複数のソースからクエリする
    10.16.10 メソッド構文のクエリの接続
    11.16.11 クエリ結果のグループ化
  12.16.12 メソッド構文で複数のソースを関連付ける
    13.16.13 メソッド構文のグループ化結合
    14.16.14 メソッド構文の左外部結合
    15.16.15 メソッド構文のlet句/【Exercise】練習問題
 
インデックス・ページヘ  「[完全版]究極のC#プログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間