かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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を、超たくさん書くことって限られてるので、そんなに困ることはないです。

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