LINQ_Query

プログラミング

C#の LINQ(統合言語クエリ)活用方法【クエリ構文データ取得篇】

LINQってややこしいですよね。プログラミング経験が浅い方には敷居が高い代物ではないでしょうか。メソッド構文のラムダ式なんてはじめは(今も・・・)チンプンカンプンでした。(笑)

LINQには主に2種類の構文が準備されています。ひとつが今回紹介するクエリ構文で、もう一つはメソッド構文です。メソッド構文には「->」が出現します。

クエリ構文は特にSQLに似ていますよね。ですが、SQLとは全くの別物です。これ勘違いしがちですよね。私もC#サイドでコーディングするSQLだと勝手に思い込んでいました。selectやらwhereなどSQLのコーディング経験がある方でしたら見覚えのある単語が出てくるから勘違いしちゃいますよね。

SQLとは全くの別物ですが、けっきょくはデータベースサイドでSQLに変換しないといけませんから、似たような単語がけっこう出てくるわけです。

正直、クエリ構文よりメソッド構文を理解することに力を注ぐべきです。クエリ構文はC#やVB.NETにしか出現しません。しかも微妙に書き方も変わってくるし・・・

ですが、私の個人のメモ書き程度にクエリ構文に出くわした時のために、データを取得する方法だけでも記載しておきます。ご参考にどうぞ!!

クエリ構文を使用してのデータの取得

以下のサンプルプログラムでは、LINQ to Entitiesを使用しています。
そして以下のサンプルは取得の基本の型ですね。「select」「from」「join」「where」「orderby」と取得クエリなら必須であろう命令群です。これさえまずは覚えていたら、取得はとりあえずできると思います。

注意が必要なのは、クエリ構文では外部結合なるものは存在しません。以下のプログラムでは、tempxxxに一時的に結合取得した内容を保存し、それにDefaultIfEmpty()をつけて取得します。これで外部結合ちっくなコーディングに変貌します。

上記では記述していませんが、よく使用される命令に「FirstOrDefault」や「LastOrDefault」があります。これはFirstOrDefaultだと最初の1行が返され、LastOrDefaultでは最後の1行が返されます。上記のプログラムに記述するならば、select new { x, y, xxxname.Nm, yyyname }).FirstOrDefault();となりますね。返すべき値がない場合ですと、参照型ならnullが返されます。

まとめ

いかがでしたでしょうか。

まだまだ取得で使える命令はたくさんあります。Unionなどもそうですよね。SQLではUnionを使う機会も多いと思います。

一番初めにも言いましたが、クエリ構文よりもやはりメソッド構文に力を注ぎましょうね。メソッド構文を覚えれば他の言語にも応用が利きますから。

最後までお読みいただきありがとうございました。

-プログラミング
-,

© 2020 秀凛堂