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

Chapter16 LINQとメソッド構文

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

16.4 絞り込みと結果の生成

 すでに説明したさまざまな句を含むクエリ式をメソッド構文に書き換えてみよう

 まず、where句による結果の絞り込みとselect句による結果の生成を含むサンプルコードを書き換えてみよう(リスト16.6参照)。

using System;
using System.Linq;

class 車両形式
{
  public bool 地下鉄乗り入れ可能 = false;
  public string 形式名;
  public int 導入年度;
}

class Program
{
  static void Main(string[] args)
  {
    車両形式[] 車両形式データ =
    {
      new 車両形式() { 形式名 = "6000系", 導入年度 = 1972,
                                        地下鉄乗り入れ可能 = true },
      new 車両形式() { 形式名 = "7000系", 導入年度 = 1984 },
      new 車両形式() { 形式名 = "8000系", 導入年度 = 1992 },
      new 車両形式() { 形式名 = "9000系", 導入年度 = 2001,
                                        地下鉄乗り入れ可能 = true },
    };

    var query = from x in 車両形式データ
                where x.地下鉄乗り入れ可能
                select new { x.形式名, x.導入年度 };

    foreach (var 形式 in query)
    {
      Console.WriteLine(
                "{0} {1}年導入", 形式.形式名, 形式.導入年度);
    }
    // 出力:
    // 6000系 1972年導入
    // 9000系 2001年導入
  }
}
リスト16.6 絞り込みと結果の生成

 上記リスト16.6のクエリ式は、次の行に書き換えることができる。

var query = 車両形式データ
            .Where((x) => x.地下鉄乗り入れ可能)
            .Select((x) => new { x.形式名, x.導入年度 });

 where句はWhereメソッドの呼び出しに置き換えられ、引数は条件式ではなくラムダ式に変化している。また、select句はSelectメソッドの呼び出しに置き換えられているが、もちろん型名を指定しないオブジェクト生成を引数に記述できる。

 この記述において、Whereメソッドの引数にあるラムダ式の仮引数xと、Selectメソッドの引数にあるラムダ式の仮引数xはまったく別個の存在となる。クエリ式では範囲変数xは1つだけ宣言されて使用されたが、ラムダ式の引数はそれぞれ別個に宣言し、別個に使用される必要がある。これも、クエリ式とメソッド構文の相違といえる。


 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 記事ランキング

本日 月間