C# これなら分かる Linq 基本編3-2. コレクションの加工

VisualStudio2016にて、新しくプロジェクトを作成します。
ウィンドウにボタンを一つ配置して、下記のコードを記載。

動作
配列 numbers の中から、条件に合う数値のみを抽出します。
抽出された値を型推論に基づく匿名オブジェクトを活用し、必要な情報だけを絞り込んで結果を得、MessageBoxに表示していきます。

解説
通常、匿名型はクエリ式の select 句で使用され、ソース シーケンスの各オブジェクトからプロパティのサブセットを返します。
匿名オブジェクト (下記の new { n.Name, n.Age }) を作成しています。
匿名型オブジェクトの例
匿名型はこのように作る事ができます。
//var v = new { Amount = 108, Message = “Hello” };
これをLinq SELECT部分で抽出し、新しく作成していきます。
上記で作成された匿名型変数vはIEnumerableインターフェースを実装し、foreachでの処理が可能となる。
IEnumerableの特徴
foreachでの処理可能
自作コレクションをつくることができる

using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;

namespace Linq
{
   ///
   /// MainWindow.xaml の相互作用ロジック
   ///
   public partial class MainWindow : Window
   {
      public MainWindow()
      {
         InitializeComponent();
      }

      class Person
      {
         public string Name;
         public int Age;
         public string Job;
      }

      private void Linq3_2_Click(object sender, RoutedEventArgs e)
      {
         //Person配列を作成し、データを作成しておく
         Person[] persons =
         {
            new Person() { Name = "一郎", Age=20, Job = "サラリーマン" },
            new Person() { Name = "二郎", Age=19, Job = "就活中" },
            new Person() { Name = "三郎", Age=18, Job = "新聞配達" },
         };
         //匿名オブジェクト を作成する
         var q = from n in persons select new { n.Name, n.Age };
         foreach (var n in q) MessageBox.Show(n.Name + " is " + n.Age);

         //匿名オブジェクト
         //匿名型を使用すると、あらかじめ明示的に型を定義することなく、一連の読み取り専用プロパティを単一のオブジェクトにカプセル化できるので便利です。型の名前はコンパイラにより生成され、ソース コード レベルでは使用できません。各プロパティの型はコンパイラにより推測されます。

         //匿名型はこのように作る事ができます。
         //var v = new { Amount = 108, Message = "Hello" };
      }
   }
}