かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

LINQのメソッド構文、クエリ式の構文

LINQってメソッド構文とクエリ式の構文の2つがあります。どっち使います?という話ですが個人的な見解として、メソッド構文がLINQの全機能にフルアクセスできるという点でメソッド構文を使用しています。 LINQのメソッド構文とクエリ式の構文の対応は以下のページにまとまっています。

Query Expression Syntax for Standard Query Operators

ちなみにクエリ式の構文のメリットとしては多段SelectManyが見やすいという点があります。

var a = from h in hoge
    from f in fuga
    from b in bar
    select new { h, f, b };

メソッド構文だとこういう感じになる。

var a = hoge.SelectMany(_ => fuga, (h, f) => new { h, f })
    .SelectMany(_ => bar, (hf, b) => new { hf.h, hf.f, b });

これの数がちょっと増えてくるとSelectManyのメソッド構文のほうがつらくなってきます。といっても、SelectManyを、超たくさん書くことって限られてるので、そんなに困ることはないです。

ということで、メソッド構文推しですよ!という話しでした。