PubsデータベースのTitlesテーブルにはPub_Idという外部キー項目があり、それをもとにPublishersテーブルからPub_Nameが取得できる。
マスターやコードテーブルから名称を取ってくるというのはRDBにおいて基本中の基本であり頻出するパターンだ。
SQLで書くならtitlesテーブルとpublishersテーブルをJoinする必要がある。
この程度のJoinなら難しくはないのだが私はいつもSQL本を見ながら書いている。(SQLServerとOracleで書き方が違ったりするので、たまにしかSQLを書かない私にはどうにも覚えられない)
これがLINQを使うと以下のようにいとも簡単に書けるようになる。
using (PubsDataContext pubs = new PubsDataContext())
{
pubs.Log = Console.Out;
var titles = pubs.titles.Where(t => t.price > 10)
.Select(t => new
{
t.title,
t.price,
t.publishers.pub_name
});
form.dataGridView1.DataSource = titles;
}
using (PubsDataContext pubs = new PubsDataContext())
{
pubs.Log = Console.Out;
var titles = from t in pubs.titles
where t.price > 10
select new
{
t.title,
t.price,
t.publishers.pub_name
};
form.dataGridView1.DataSource = titles;
Console.Beep();
}
発行されたSQLを確認するとちゃんとLEFT OUTER JOINが使われている。
ちなみに、これまで私はなぜかリレーションを張ったDBを使っているシステムを見たことがない。
なので、INNER JOIN したい場合のLINQはどう書けば良いのだろうなどと考えてしまった。
0 件のコメント:
コメントを投稿