投稿

5月, 2018の投稿を表示しています

LINQを使用し、ソースコードの可読性を高める

こんにちは。福岡事務所の荒平です。
今回はソースコードの可読性を高める方法について説明していきたいと思います。

例えばC#で二つのDataTableを比べ、片方のTableにだけ存在するデータを取得したい、
というとき、皆さんはどのようにして処理を書きますか?

-------------------------------------------------------

TableATableB
 果物  在庫数 果物  在庫数
リンゴ    100リンゴ  130
ミカン  120バナナ  120
バナナ  140ブドウ  150
ブドウ  150

このTableAとTableBを比べ、TableAにしか存在しない果物(ミカン)のデータのみを取得したい

-------------------------------------------------------

いくつか方法はありますが、このように考えた方もいるのではないのでしょうか?

・for文やforeach文などを二重にループさせ、
 if文などで果物が両方に存在するかどうかを判定する

しかし、この方法だと以下のようなデメリットがあります。
1. ネスト構造になるため、他の人が見た場合、可読性が低くなる
2. if文が必要になったり、あらかじめTableのレコードの並び順が決まっていないといけないなど、余計なコードが増えたり、前提条件が必要になる

そこで、こういった問題を解決するために最近のC#ではLINQを使用します。
ちなみにLINQとはLanguage INtegrated Query(統合言語クエリ)の略で、
データの集合から特定のデータのみを取得したり、検索や集計などをしてくれる機能です。

ということでさっそくLINQを使用してみましょう。

-------------------------------------------------------

 var Record = (from rowA in TableA.AsEnumerable()
       where !((from rowB in TableB.AsEnumerable()
              select rowB["果物"]).Contains(rowA["果物"]))
  …