*

[C#, Linq]foreach構文は書けるけど、Linqはよくわからなくて勉強する気がなくなった貴方に

公開日: : 最終更新日:2015/08/03 C#

Linq普及委員会エントリです。

いまさらすぎるわ! とか言わないで。
小難しい話はなしに、とりあえず使ってみよう。使ってけば覚えるさ、なノリです。
foreachが書ければそこに一ひねり加えるだけだから簡単簡単。

対象の方

・foreach構文が書ける人
foreachは書けるよ、って人にLinq C#の使い方を広めたい。
この説明ではラムダ式はわからなくてもなんとかなります。

for文が書ける人には、それ向けの書き方もあるんですが、foreachは覚えておいて損はないので、覚えましょう。

そもそもLinqって何?

LinqはいわゆるSQLとかデータの問い合わせの際に、オブジェクト指向っぽく、結果をオブジェクトで欲しい。
そんなのを実現するものです。
ついでに、SQLっぽい書き方も地の文で書けるようにしようぜ! みたいなノリ。

小難しい話は抜きにまずはforeach

Linqは実はforeachに機能を追加したようなものなんです。
foreachで表現できるものはLinqで表現もできる。

というわけでよくあるコレクションに条件一致したものを追加するというforeachを書きます。

ただ数字が5より大きいものを抽出して追加しているだけです。

ほとんどそのままLinqに置き換え

ではforeachはそのままLinqに書き換えができるので、やってみます。
Linqの意味がないLinqなので、実際はこう書いてはだめですよ。

文字数的に、もともと foreach(var val in orgIds)のvarとinが節約できて短縮できました! そうじゃない。

ここはラムダ式的なものになるんですが、Linqだけを手っ取り早く覚えたいなら、

上記は同じ文章だと思ってください。
わざわざvar valって宣言しなくても済むんです。
そして、foreachと同じく、 Hoge.ForEach(val =>で、valにHogeの要素が代入されていくんです。

もちろん↓みたいに宣言もできます。

ただし、この場合はvarで宣言はできないんです。そういうもんなんです。

免許皆伝?

これでLinqを使うことができました。おめでとうございます。
といけたら楽なんですが、上記のLinqはLinqっぽくないLinqと評したように、真価がまだ見えていません。
あのソースだったらforeachでも十分ですからね。

というわけでLinqは何が出来るかというと、先ほどのソースでいえば、条件分岐をわざわざif文で書く必要がありません。
LinqっぽいLinqで書き直してみます。

かなーりすっきりしましたね。
このように本来ならif文で書く部分も短く一行にまとめることができるのがLinqです。

さて、そうなると、出力しているところも冗長に見えてきましたね。
というわけで、全てLinqにしてしまいましょう。

結果的に12行が7行になりました。
素晴らしいことです。
ぜひともLinqを使っていきましょう。

おわり。

ad

関連記事

wannabenote

[C#, Excel]最終行を取得する

Excelを触っているのでC#でExcelネタが続きます。 Excelの行数が知りたい Exce

記事を読む

Excel vsto 印刷設定 print setting

[C#, VSTO]Excelの印刷設定をする

印刷設定 VSTO(Visual Studio Tool for Office)Excelなんぞを

記事を読む

NuGet visual studio

[C#]C#でPDFファイルを画像(System.Drawing.Image)にする

PDFを画像に PDFファイルを読み込んで、画像にする必要があったんです。 インターネットで調べ

記事を読む

Delgate Multi Thread

[C#]マルチスレッドとイベントハンドラでデータベースのテーブルの値の変更を検知する。

システム利用中にデータベースの内容が更新 こういったシステムは往々にしてあるかと思います。 特に

記事を読む

logo

[Unity]Unity 2Dチュートリアル スプライトをドラッグ(タップ)して移動する ソース解説

◆全文 using UnityEngine; using System.Collection

記事を読む

logo

[C#]システム関連付けのソフトでファイルを起動する

事の発端 PDFをAdobeReaderで開きたいといわれました。 コマンドラインでAdobeR

記事を読む

Wannabenote

[Unity]Unity2Dチュートリアル パズルをランダム生成して配置する。(PrefabとInstantiate)

Unity関連記事まとめページはこちら 前回の続き。 パズルを消すことが出来たのでランダ

記事を読む

logo

[Unity]Unity 2Dチュートリアル スプライトを元の位置に戻す ソース解説

◆全文 using UnityEngine; using System.Collection

記事を読む

logo

[C#, AS400]列挙体の文字列化&DB2/400にODBC接続

定数をなるべく書きたくないんです。 あとからメンテをするときに複数箇所変更しなくてはいけないから。

記事を読む

socket p2p unity

[Unity]Socket通信でP2Pすっぞ ホストへ接続

前回はホストが待ちうけするところまで作りました。 今回はクライアントがホストへ接続できるように

記事を読む

ad

Message

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

ad

  •  Auther;わなび

     「オープン系得意だよね? 俺のPCの調子悪いんだけど」という無茶振りから解き放たれゲームエンジニアに。
    C#とかUnityを扱います。
    Twitterフォロー大歓迎です。
    githubアカウント→wannabenote
  • follow us in feedly
PAGE TOP ↑