トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

LINQ.cs

[C#]
LINQって内包表記なんだ!
これは俄然面白い。

「リレーショナルデータベースや XML に対する操作をプログラミング言語に統合するもの」というのはLINQの説明の3分の1程度でしかない(かつわかりにくいし、厳密にはまちがっている)。

LINQではクエリ結果がオブジェクトとして返されるが、それはイテレーターのようだ。
おそらくデータベースでは行オブジェクトなどを対象とするのだろうし、集合を扱う場合には集合の各メンバーを対象とする。

  • 内包表記なので、集合をイテレーションの対象とする。
  • そこから要素を1つずつ抜き出し、それぞれの要素データに対してフィルタをしたり処理をする。
  • その結果をまたイテレーターのオブジェクトとして返す、というのがLINQ。

「何を対象として操作するのか」という頭で処理を記述する必要がある。

from 句で指定するのが対象とする個々の「何」。
in の後に指定するのが「何」が所属する集合。
where 句で集合から取り出す「何」をフィルタする条件を指定できる。
select 句でLINQが最終的に返すイテレーターに含めるデータを指定する。「何」をそのまま返したり、「何」を加工して返したりするのが普通。

結局LINQは集合を簡潔に扱える強力な機構を言語に備え付ける、という課題に対処しているだけであり、その構文をSQLから拝借してきている、というだけだ。
その結果、「クエリを言語に統合したかのように見える」ということだ。
SQLが集合を扱うという問題を目的とした構文である、ということを理解できていないと、LINQが何のために存在しているのかわけがわからないだろう。

最終更新時間:2020年06月27日 09時59分10秒