C# これなら分かる Linq 基本編4-2. メソッド形式と、メ ソッド形式を使う場合

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

動作
配列 numbers の中から、条件に合う数値のみを抽出します。
抽出された値を型推論に基づく匿名オブジェクトを活用し、必要な情報だけを絞り込んで結果を得、MessageBoxに表示していきます。
クエリ式は、LINQ と呼ばれる機能を実現するために C# に用意された機能ですが、実体はクラス ライブラリに存在します。そこで、クエリ式を使わずに、直接このクラス ライブラリを呼び出すこともできます。これをメソッド形式と呼びます。

比較
Linqクエリ式:
var q = from n in persons select new { n.Name, n.Age };
Selectメソッド:
var q = persons.Select((n) => new { n.Name, n.Age });

解説
通常、匿名型はクエリ式の 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 Linq4_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 = persons.Select((n) => new { n.Name, n.Age });
            foreach (var n in q) MessageBox.Show(n.Name + " is " + n.Age);

            //Selectメソッドを利用した書き方と、同義のLinqクエリ式
            //var q = from n in persons select new { n.Name, n.Age };

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

            //匿名型はこのように作る事ができます。
            //var v = new { Amount = 108, Message = "Hello" };
            //上記で作成された匿名型vはIEnumerableインターフェースを実装し、foreachでの処理が可能となる。
            //IEnumerableの特徴
            //foreachでの処理可能
            //自作コレクションをつくることができる        
        }
    }
}