ページ

2011年4月5日火曜日

◆LINQでマスターから名称を取得するSelect

PubsデータベースのTitlesテーブルにはPub_Idという外部キー項目があり、それをもとにPublishersテーブルからPub_Nameが取得できる。

20110405203548

マスターやコードテーブルから名称を取ってくるというのは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 件のコメント:

コメントを投稿

私が最近チェックした記事